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 :city
到has_one :city
。
添加了belongs_to :city
到city.rb
PS:我正在使用Rails 3.2.3和Ruby 1.9.3。
有一个重要的安全改变轨3.2.3,需要你明确允许批量分配通过设置config.active_record.whitelist_attributes
为false
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