我在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;在确定模型是否有效时考虑的方法?
答案 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