从包含验证访问类方法

时间:2014-08-21 01:54:55

标签: ruby-on-rails validation class-method

我想在使用包含验证时包含一个类方法作为我的选项:

class Search < ActiveRecord::Base

  attribute :foo, Array
  validates :foo, inclusion: class_method_options

  def self.class_method_options
   ['foo', 'bar']
  end
end

但是我得到undefined method 'class_method_options' for Search:Class (NoMethodError)

我尝试使用Google搜索解决方案,但刚刚找到了如何创建自定义验证。我不需要全新的验证,我只想使用标准的Rails包含验证器。如何从包含验证中访问class_method_options

3 个答案:

答案 0 :(得分:8)

它尚未定义。

class Search < ActiveRecord::Base
  def self.class_method_options
   ['foo', 'bar']
  end

  attribute :foo, Array
  validates :foo, inclusion: class_method_options

end

那可行或者你可以这样做:

class Search < ActiveRecord::Base
  class_method_options = ['foo', 'bar']

  attribute :foo, Array
  validates :foo, inclusion: class_method_options

end

答案 1 :(得分:2)

你必须这样做

class Search < ActiveRecord::Base

  attribute :foo, Array
  validates :foo, inclusion: {in: :class_method_options }

  def class_method_options
   ['foo', 'bar']
  end
end

答案 2 :(得分:0)

鉴于:in接受了Proc,我最终得到了

validates :foo, inclusion: { in: Proc.new { |search| search.class.class_method_options } }