我有一个带有completed
列的模型。要将completed
设置为true,必须将某些验证设置为有效。
是否有一些简单的方法可以检查对象是否有效且completed
设置为true而不实际更改对象的属性?
目前我正在这样做:
def ready_for_completion?
self.completed = true
ready = self.valid?
self.completed = false
ready
end
但我认为有一个更好的方法可以做到这一点,只是还没有找到方法。
更新
我应该更准确。
我的问题是视图特定的,我在对象上有一个按钮,在按下它之后将completed
设置为true
,如果对象尚未准备好完成,我希望禁用该按钮。 / p>
答案 0 :(得分:3)
我不会validate
您的completed
字段。当您感觉“对象”已完成时,您有责任设置此属性。
你应该看看state machine
答案 1 :(得分:0)
方法是正确的,但我会将其包装成方法
def as_completed
old_completed = completed
self.completed = true
result = yield
self.completed = old_completed
result
end
然后
def ready_for_completion?
as_completed { valid? }
end
答案 2 :(得分:0)
just you can use valid? for test model is valid or not in controller/view/model as
per below example:
if model.valid?
#your code
end
===============
class Person < ActiveRecord::Base
validates :name, presence: true
end
Person.create(name: "John Doe").valid? # => true
Person.create(name: nil).valid? # => false