如果挑战的类别为committed
,我怎样才能创建habit
存在必须为真的验证?
class Challenge < ActiveRecord::Base
CATEGORY = ['goal', 'habit']
serialize :committed, Array
validates :committed, presence: true, if: :habit # I also tried with 'habit' & 'Habit'
end
答案 0 :(得分:2)
validates :committed, presence: true, :if => lambda { |c| c.category == 'Habit' }
答案 1 :(得分:2)
由于您的类别名为'habit'
(请注意,它不是'Habit'
),因此验证结果如下:
validates :committed, presence: true, if: ->(c) { c.category == 'habit' }
作为旁注:除非您的categories
表中有一个名为challenges
的列,否则我认为您的范围不会起作用。
因此,如果您打算选择具有类别'habit'
的挑战,则范围将如下所示:
scope :habit, -> { where(category: 'habit') }
根据评论中的讨论,如果您希望committed
代替nil
而不是[""]
,则无需添加自定义验证:
validate :committed_content
private
def committed_content
self.committed = nil if committed.empty? || committed.all?(&:blank?)
true
end
答案 2 :(得分:1)
你可以有一个方法并像这样使用它:
validates :committed, presence: true, if: :habit?
def habit?
self.category == 'habit'
end