[英]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:city
到city.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.