我想在使用包含验证时包含一个类方法作为我的选项:
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
?
还没有定义。
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
你必须这样做
class Search < ActiveRecord::Base
attribute :foo, Array
validates :foo, inclusion: {in: :class_method_options }
def class_method_options
['foo', 'bar']
end
end
给定:in
接受Proc,我最终与
validates :foo, inclusion: { in: Proc.new { |search| search.class.class_method_options } }
您也可以使用lambda,如下所示:
validates :foo, inclusion: { in: -> { class_method_options } }
当这样做时,您不需要在调用validates
之前定义它。