试图解决文档目的的谜团。 我们从Rails的3.2升级到Rails 4切换! Bang Change in Rails 4
在Rails的3.2代码中,我们(当然,有):
def update_object_special_eligibility
object.toggle!(:can_run_on_special) if object && object.can_run_on_special? && ineligible_for_special?
end
我知道这不会给你所有你需要的信息,但这是错误。你应该知道can_run_on_special
是一个位域而不是官方属性,尽管我不认为它实际上是相关的。只是觉得应该让你知道为什么我们得到的错误:
1) Error:
ObjectStatusTest#test_should_mark_object_as_not_eligible_to_run_on_special_for_specific_unschedule_reasons:
ActiveModel::MissingAttributeError: can't write unknown attribute `can_run_on_special'
config/initializers/acts_as_audited.rb:280:in `write_attribute_with_audit'
app/models/object_status.rb:437:in `update_deal_amazon_eligibility'
test/unit/object_status_test.rb:481:in `block in <class:ObjectStatusTest>'
test/fast_test_helper.rb:99:in `call'
test/fast_test_helper.rb:99:in `block in <class:TestCase>'
我们把它改为代码工作on Rails的4:
def update_object_special_eligibility
if object && object.can_run_on_special? && ineligible_for_special?
object.update_attributes! :can_run_on_special => false
end
我怀疑是因为toggle!
运作就像update_attribute
在绕过验证,它只是返回false
用于保存该属性,因此,toggle!
只是不工作了,因为属性的更新和保存不起作用。但我不确定是这种情况。我希望在这里有人可能会对ActiveRecord :: Persistence方法(toggle!
)在Rails 4中的运行方式有所不同有所了解。或者,是否更新了“属性”和保存方式可能不同?
非常感谢!