41

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

我是如何创建项目的(从头开始):

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

分贝/种子.db:

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

耙分贝:种子

将此行<%= 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。

4

3 回答 3

70

有一个重要的安全更改轨道 3.2.3 要求您通过设置明确地允许批量config.active_record.whitelist_attributes分配false

https://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

或者(更好),而不是允许批量分配,您只需要设置attr_accessible模型中您希望能够更改的属性,例如

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

请查看rails 安全指南以获取有关 rails 中的质量分配的更多信息。

于 2012-04-07T01:05:58.590 回答
3

或者你可以改变

config.active_record.mass_assignment_sanitizer = :strict 

config.active_record.mass_assignment_sanitizer = :logger 

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

于 2014-03-28T03:45:46.647 回答
2

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

attr_accessible :city_id
于 2014-07-01T09:08:22.977 回答