5

シリアル化された属性 (配列) を持つモデルがあります。配列の各メンバーが事前に決定されたオプションに含まれている場合にのみ、モデルを検証したいと思います。

例: 「mood」属性を持つ Person モデルがあります。ユーザーは複数の気分を持つことができますが、それぞれの気分は「幸せ」、「悲しい」、「疲れた」、または「怒っている」のいずれかでなければなりません。

モデルは次のようになります。

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

  attr_accessible :mood
  serialize :mood
end

コメント付きの検証は機能しません。それを機能させる方法はありますか、それともカスタム検証が必要ですか?

(注: 個別の Mood モデルを作成したくありません。)

4

2 に答える 2

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
于 2012-05-28T11:10:28.343 に答える