在rails中绕过attr_accessible/protected

Ken*_*and 1 activerecord ruby-on-rails ruby-on-rails-3

我有一个模型,当它实例化一个对象时,也会创建另一个具有相同用户ID的对象.

class Foo > ActiveRecord::Base

after_create: create_bar

private

def create_bar
  Bar.create(:user_id => user_id #and other attributes)
end

end
Run Code Online (Sandbox Code Playgroud)

在Bar.rb中,我有attr_protected保护它免受黑客攻击.

class Bar > ActiveRecord::Base
  attr_protected :user_id, :created_at, :updated_at
end
Run Code Online (Sandbox Code Playgroud)

就像现在一样,我似乎无法创建一个新的Bar对象而不禁用attr_protected或让Bar对象的user_id变为空白...

如何让bar对象接受来自foo的:user_id属性而不会失去对attr_protected的保护?

Rob*_*rty 10

在呼叫newcreate,或find_or_create_by(以及其他最终呼叫的人new)你可以传递一个额外的选项,without_protection: true.

http://api.rubyonrails.org/v3.2.22/classes/ActiveRecord/Base.html#method-c-new