Ruby on rails 可以暂时禁用Rails中用于开发任务的批量分配安全性吗?

Ruby on rails 可以暂时禁用Rails中用于开发任务的批量分配安全性吗?,ruby-on-rails,Ruby On Rails,Rails批量分配安全性对于生产代码来说是非常好的。但是,当我在做一些事情,比如播种数据库时,我希望能够使用比 joe = User.create!(name: 'Joe', email: 'joe@blow.com') model = MyModel.new model.update_attributes({name: 'Mod', description: 'blah', creator: joe}, as: :admin, without_p

Rails批量分配安全性对于生产代码来说是非常好的。但是,当我在做一些事情,比如播种数据库时,我希望能够使用比

joe = User.create!(name: 'Joe', email: 'joe@blow.com')
model = MyModel.new
model.update_attributes({name: 'Mod', description: 'blah', creator: joe},
                        as: :admin, without_protection: true)
model.save!
比如

joe = User.create!(name: 'Joe', email: 'joe@blow.com')
MyModel.create!({name: 'Mod', description: 'blah', creator: joe})
有没有一种简单的方法可以仅对这样的开发脚本禁用批量分配?

一个优雅的答案是有效的

无论你想跳过哪里:

@your_object.accessible = :all

这是质量分配保护的常见问题,也是Rails 4引入强参数的原因之一。这会将保护逻辑移到控制器中,因此如果您直接操作ActiveRecord对象,它不会妨碍您


您可以使用获取Rails 3应用程序的相同行为。

本地绕过批量分配安全性的一个简单选项是只发送val=调用,如下所示:

def create_user_with_values(args)
  inst = User.new
  args.each { |k,v |
     inst.__send__ "#{k.to_s}=",v
  }
  inst.save!
end
create_user_with_values {name: 'Mod', description: 'blah', creator: joe}
然后像这样调用它:

def create_user_with_values(args)
  inst = User.new
  args.each { |k,v |
     inst.__send__ "#{k.to_s}=",v
  }
  inst.save!
end
create_user_with_values {name: 'Mod', description: 'blah', creator: joe}

:通常情况下,\u无法访问\u属性可能会有所帮助。谢谢您的建议。这是一个非常好的方法,但我决定接受另一个建议的答案,因为它是一个更全面的解决方案,也将在Rails 4中使用。我怎么能忘记这一点,+1