私は直列化された属性(配列)を持つモデルを持っています。配列の各メンバーがあらかじめ決められたオプションに含まれている場合にのみモデルを検証したいと思います。シリアル化された属性のインクルード検証を実行するにはどうすればよいですか?
例: 「気分」属性を持つPersonモデルがあります。ユーザーは複数の気分を持つことができますが、それぞれの気分は「幸せ」、「悲しい」、「疲れている」、「怒っている」のいずれかでなければなりません。
モデルはこのようなものになるだろう:コメント検証が動作しません
class Person < ActiveRecord::Base
MOODS = %w[happy sad tired angry]
# validates :inclusion => { :in => MOODS }
attr_accessible :mood
serialize :mood
end
。それを動作させる方法はありますか?またはカスタム検証が必要ですか?
(注:私は別のムードモデルを作成する必要はありません)
チェックこのドキュメント、http://guides.rubyonrails.org/active_record_validations_callbacks.html#inclusionを:あなただけに、ブロック構文であなたが期待するかもしれない方法を、それらの検証を置くことができます。そのためにカスタム検証を作成する必要はありません。 – Chamnap
シリアル化された属性で、そうでなければ、直列化された値が包含のためにチェックされます。つまり、MOODS.include?(mood)がfalseであるためmood = [tired、angry]は失敗します。 –
ああ、あなたの答えは正しいでしょう。 – Chamnap