我有一个Timesheet
模型,它的许多属性都没有添加到attr_accessible
中。试图在seeds.rb
中创建种子数据,但在运行rake db:seed
时以及在控制台中尝试代码时(尽管使用了.save(validate: false)
)都遇到了大量分配保护错误。
rake db:seed
:输出错误
rake aborted!
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: spent, worked_time, driving_time
控制台:
pry(main)> ts = Timesheet.new(spent: 0, review: "none", driving_time: 0, worked_time: 3600).save(validate: false)
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: spent, driving_time, worked_time
from /home/vagrant/.rvm/gems/ruby-1.9.3-p547/gems/activemodel-3.2.18/lib/active_model/mass_assignment_security/sanitizer.rb:48:in `process_removed_attributes'
您需要跳过批量分配,.save(validate: false)
只跳过验证。
尝试通过选项:
:without_protection => true
你需要做的是:
ts = Timesheet.new(spent: 0, review: "none", driving_time: 0, worked_time: 3600, :without_protection => true).save(validate: false)
请尝试以下操作:
ts = Timesheet.new({spent: 0, review: "none", driving_time: 0, worked_time: 3600},
without_protection: true).save(validate: false)
更多信息点击这里
最佳实践表明,如果您希望用户在更新或创建表单时发送此数据,则必须使用attr_accessible :spent, :driving_time, :worked_time
在模型中列出您希望用户更新的字段。
选项validate: false
阻止保存前的验证,但不阻止批量分配控制。