我有一个带有序列化属性(数组)的模型。我想仅在数组的每个成员都包含在预定选项中时才验证模型。
实施例: 我有一个具有“情绪”属性的Person模型。用户可以有多种心情,但每种情绪必须是“快乐”,“悲伤”,“疲倦”或“愤怒”。
模型将是这样的:
class Person < ActiveRecord::Base
MOODS = %w[happy sad tired angry]
# validates :inclusion => { :in => MOODS }
attr_accessible :mood
serialize :mood
end
评论验证不起作用。有没有办法使它工作或我需要自定义验证?
(注意:我不想创建单独的Mood模型。)
答案 0 :(得分:8)
class Person < ActiveRecord::Base
MOODS = %w[happy sad tired angry]
validate :mood_check
attr_accessible :mood
serialize :mood
protected
def mood_check
mood.each do |m|
errors.add(:mood, "#{m} is no a valid mood") unless MOODS.include? m
end
end
end
答案 1 :(得分:2)
将此留在这里以防将来帮助任何人 - 我写了一个宝石来更好地处理验证序列化属性。您可以按照以下方式将这些验证放在块语法中:
class Person < ActiveRecord::Base
MOODS = %w[happy sad tired angry]
attr_accessible :mood
serialize :mood
validates_array_values :mood, inclusion: { in: MOODS }
end