41

非常に単純な AddressBook Rails アプリケーションを構築しようとしています。ただし、「保護された属性を一括割り当てできません: city_id」というエラーが表示されます。どうすればこれを修正できますか? 以下のレールコードに関するコメント/提案を回答に追加してください。ありがとう。

プロジェクトの作成方法(ゼロから):

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

デシベル/シード.デシベル:

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 を使用しています。

4

3 に答える 3

70

Rails 3.2.3 では重要なセキュリティ変更があり、一括割り当てを明示的に許可するように設定する必要がありますconfig.active_record.whitelist_attributesfalse

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 に答える
2

次のようにモデルにデータフィールドを含めるだけです。

attr_accessible :city_id
于 2014-07-01T09:08:22.977 に答える