5

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

示例:我有一个具有“情绪”属性的 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 回答
2

将其留在这里以防将来对任何人有所帮助-我编写了一个 gem 来更好地处理验证序列化属性。您可以将这些验证放在块语法中,您可能期望的方式:

class Person < ActiveRecord::Base
  MOODS = %w[happy sad tired angry]
  attr_accessible :mood
  serialize :mood

  validates_array_values :mood, inclusion: { in: MOODS }
end

https://github.com/brycesenz/validates_serialized

于 2015-01-05T17:53:49.790 回答