我正在使用本教程将我的项目从 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>