ruby-on-rails 从包含验证访问类方法

14ifxucb  于 2023-07-01  发布在  Ruby
关注(0)|答案(4)|浏览(95)

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

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)
我试着在谷歌上搜索解决方案,但只是找到了如何创建自定义验证。我不需要一个全新的验证,我只想使用标准的Rails包含验证器。如何从包含验证访问class_method_options

trnvg8h3

trnvg8h31#

只是还没有定义。

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
0md85ypi

0md85ypi2#

你必须这样做

class Search < ActiveRecord::Base

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

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

fnx2tebb3#

假设:in接受Proc,我最终得到

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

0lvr5msh4#

你也可以使用lambda,像这样:

validates :foo, inclusion: { in: -> { class_method_options } }

这样做的时候,你不需要在调用validates之前定义它。

相关问题