Rails错误:无法批量分配受保护的属性

我正在尝试构build一个非常简单的AddressBook rails应用程序。 但是,我收到此错误“无法批量分配受保护的属性:city_id”。 我怎样才能解决这个问题? 请随意添加任何评论/build议到您的答案关于下面的rails代码。 谢谢。

我如何创build项目(从头开始):

rails new demo rails generate model City name:string rails generate scaffold User name:string city:references rake db:migrate 

DB / seeds.db:

 City.create(name: "City1") City.create(name: "City2") City.create(name: "City3") 

耙db:种子

将此行<%= f.text_field :city %>app/views/users/_form.html.erb<%= f.collection_select :city_id, City.all, :id, :name %>

改变了user.rb自动生成的行belongs_to :cityhas_one :city

添加了belongs_to :citycity.rb

PS:我正在使用Rails 3.2.3和Ruby 1.9.3。

有一个重要的安全改变轨3.2.3,需要你明确允许批量分配通过设置config.active_record.whitelist_attributesfalse

http://weblog.rubyonrails.org/2012/3/30/ann-rails-3-2-3-has-been-released/

http://www.h-online.com/security/news/item/Rails-3-2-3-makes-mass-assignment-change-1498547.html

或者(更好),而不是允许大规模的assingment,你只需要设置attr_accessible模型中的属性,你想能够改变,例如

 attr_accessible :city_id, :name # list all fields that you want to be accessible here 

请查看导轨安全指南 ,了解有关在导轨中进行批量分配的更多信息。

或者你可以改变

 config.active_record.mass_assignment_sanitizer = :strict 

 config.active_record.mass_assignment_sanitizer = :logger 

我不知道为什么必须更改为:logger但这是错误的解决scheme。

只需将模型中的数据字段包含为:

 attr_accessible :city_id