Rails 3.2-为什么尽管使用了.save(validate:false),我还是会出现大量分配保护错误



我有一个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阻止保存前的验证,但不阻止批量分配控制。

最新更新