class Test < ActiveRecord::Base
attr_accessor :sample
default_value_for :sample, true
attr_accessible :sample, as: :admin
end
とすると、
Test.new({sample: false}, as: :admin)
で、
WARNING: Can't mass-assign protected attributes for ...
となる。
default_value_for
を使わずに、after_initialize
で対応すると成功した。
class Test < ActiveRecord::Base
attr_accessor :sample
attr_accessible :sample, as: :admin
after_initialize :initialize_defaults
def initialize_defaults
self.sample = true if self.sample.nil?
end
end
原因は、
default_value_for
がInstanceMethods::initialize
を再定義してActiveRecord::Base
にextend
させていることと、protected_attributes
がActiveRecord::MassAssignmentSecurity::Core
でinitialize
を再定義しており、ActiveRecord::Base
にinclude
させていることが、競合していることだと思う。