簡體   English   中英

Rails 錯誤:無法批量分配受保護的屬性

[英]Rails error: Can't mass-assign protected attributes

我正在嘗試構建一個極其簡單的 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:city更改為has_one:city

添加belongs_to:citycity.rb

PS:我使用的是 Rails 3.2.3 和 Ruby 1.9.3。

rails 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 ,例如

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

請查看rails 安全指南以獲取有關 rails 中的質量分配的更多信息。

或者你可以改變

config.active_record.mass_assignment_sanitizer = :strict 

config.active_record.mass_assignment_sanitizer = :logger 

我不知道為什么必須更改為:logger但這是錯誤的解決方案。

只需將 model 中的數據字段包括為:

attr_accessible :city_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM