为什么我的"验证"确定我的Ruby模型是否有效的方法?

时间:2017-04-26 20:33:42

标签: ruby-on-rails ruby validation model ruby-on-rails-5

我在Rails 5.0上。我对如何评估我是否拥有有效模型感到困惑。我有这个方法的模型

class MyObjectTime < ActiveRecord::Base
    ...
  validate :valid_method

   def valid_method
     false
   end

请注意,我有硬编码&#34; false&#34;在我的有效方法中,但即使我创建了这个类的对象,并调用&#34; obj.valid?&#34;,我将得到&#34; true&#34;即使我已经装配了东西,所以模型永远不会有效。我还需要做些什么来获得我的&#34; valid_method&#34;在确定模型是否有效时考虑的方法?

2 个答案:

答案 0 :(得分:1)

permissions

验证器方法的返回值无关紧要,重要的是它会向errors object(类似哈希的对象)添加错误。

基本上class MyObjectTime < ActiveRecord::Base ... validate :valid_method def valid_method errors.add(:foo, "is not valid") if some_condition? end 运行验证,然后检查.valid?

答案 1 :(得分:0)

自定义验证的工作原理是检查自定义验证,然后在失败时添加错误。

这取自the guides

class Invoice < ApplicationRecord
  validate :expiration_date_cannot_be_in_the_past,
    :discount_cannot_be_greater_than_total_value

  def expiration_date_cannot_be_in_the_past
    if expiration_date.present? && expiration_date < Date.today
      errors.add(:expiration_date, "can't be in the past")
    end
  end

  def discount_cannot_be_greater_than_total_value
    if discount > total_value
      errors.add(:discount, "can't be greater than total value")
    end
  end
end