このチュートリアルでプロジェクトを Rails3 から Rails4 にアップグレードしていました: RailsCasts
私はモデルを持っています:
class Test < ActiveRecord::Base
validates :content, :presence => true, :length => { :minimum => 2 }
validates :name, :presence => true, :length => { :minimum => 2 }
validates :value, :presence => true
end
アップグレード後、Rails コンソールで新しいテスト オブジェクトを作成しようとしました
Test.create(name: "asd", content:"asd", value: 5)
そして得た
WARNING: Can't mass-assign protected attributes for Achievement: name, content, value
(0.2ms) BEGIN
(0.2ms) ROLLBACK
=> #<Test id: nil, name: nil, content: nil, value: nil, created_at: nil, updated_at: nil>
何かをアップグレードするのを忘れていたようです。設定ファイルやその他の Rails ファイルをオーバーライドして Rails アプリケーションを再作成しようとしましたが、何も変わりませんでした。
新しい空のプロジェクトを作成し、モデル ファイルをコピーしました。それは正常に動作していました。
私が追加する場合
config.active_record.whitelist_attributes = false
config/application.rb に、アップグレードされたプロジェクトが正常に動作します。しかし、空の rails4 では、この行が削除されているため、正常ではありません。
アップグレードするのを忘れたもの、またはアップグレードされたプロジェクトを空のように動作させるには、rails4 で config.activerecord を使用せずに作成する必要があります...?
UPD
raw_params = {:name => "asdasd", :content=>"asdasdasd", :value=>5}
=> {:name=>"asdasd", :content=>"asdasdasd", :value=>5}
2.0.0dev :002 > params = ActionController::Parameters.new(raw_params)
=> {"name"=>"asdasd", "content"=>"asdasdasd", "value"=>5}
2.0.0dev :003 > test = Test.create(params.permit(:name, :value, :content))
WARNING: Can't mass-assign protected attributes for Achievement: name, value, content
(0.2ms) BEGIN
(0.2ms) ROLLBACK
=> #<Test id: nil, name: nil, content: nil, value: nil, created_at: nil, updated_at: nil>