如何对序列化属性执行包含验证?

Luc*_*ano 5 validation serialization ruby-on-rails

我有一个带有序列化属性(数组)的模型.我想仅在数组的每个成员都包含在预定选项中时才验证模型.

示例:我有一个具有"情绪"属性的Person模型.用户可以有多种心情,但每种情绪必须是"快乐","悲伤","疲倦"或"愤怒".

该模型将是这样的:

class Person < ActiveRecord::Base
  MOODS = %w[happy sad tired angry]
  # validates :inclusion => { :in => MOODS } 

  attr_accessible :mood
  serialize :mood
end
Run Code Online (Sandbox Code Playgroud)

评论验证不起作用.有没有办法使它工作或我需要自定义验证?

(注意:我不想创建单独的Mood模型.)

Vik*_*rón 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
Run Code Online (Sandbox Code Playgroud)