:inclusion => {:in => r = (1..15), :min => r.first, :max => r.last}
这是我的工作代码。我想要动态的是“15”部分,例如
:inclusion => {:in => r =(1..Vehicle.max_passengers),:min => r.first,:max => r.last}
我定义了以下类方法:
def self.max_passengers
15
end
当然没用。我尝试过使用Procs和lambdas,但它对我来说无法正常工作。 :( 有人可以帮助我这个 - 有可能吗?
答案 0 :(得分:3)
您正在寻找custom validation method:
ActiveRecord::Base.class_eval do
def self.validates_max_passenger(attr_name, r)
validates attr_name, :inclusion => { :in => r, :min => r.first, :max => r.last } }
end
end
# later in your class of choice:
validates_max_passenger :passengers, 1..5
或者,您可以使用lambda
尝试以下操作def self.max_passengers
1..15
end
validates :attrib, :inclusion => {:in => lambda { |obj| ClassName.max_passengers } }
请注意,如果您在范围内使用:in
,则不需要最小值/最大值。
答案 1 :(得分:0)
检查validates_with
是否有任何帮助。该助手将记录传递给单独的类以进行验证,您可以通过阅读某些配置等使您的验证标准动态化。
有关validates_with
的更多信息,请访问ruby on rails guide
class Person < ActiveRecord::Base
validates_with GoodnessValidator
end
class GoodnessValidator < ActiveModel::Validator
def validate(record)
# implement your dynamic criteria here
end
end
答案 2 :(得分:0)
试试这个:
inclusion: { in: proc { 1..Vehicle.max_passengers } }