Rails:如何验证对象的特定状态而不更改其属性?

时间:2014-01-21 11:12:37

标签: ruby-on-rails validation ruby-on-rails-4 rails-activerecord

我有一个带有completed列的模型。要将completed设置为true,必须将某些验证设置为有效。

是否有一些简单的方法可以检查对象是否有效且completed设置为true而不实际更改对象的属性?

目前我正在这样做:

def ready_for_completion?
  self.completed = true
  ready = self.valid?
  self.completed = false
  ready
end

但我认为有一个更好的方法可以做到这一点,只是还没有找到方法。

更新

我应该更准确。

我的问题是视图特定的,我在对象上有一个按钮,在按下它之后将completed设置为true,如果对象尚未准备好完成,我希望禁用该按钮。 / p>

3 个答案:

答案 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