Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails验证变量proc_Ruby On Rails_Ruby On Rails 3_Validation_Lambda_Proc - Fatal编程技术网

Ruby on rails Rails验证变量proc

Ruby on rails Rails验证变量proc,ruby-on-rails,ruby-on-rails-3,validation,lambda,proc,Ruby On Rails,Ruby On Rails 3,Validation,Lambda,Proc,这是我的工作代码。我想做的动态是“15”部分,例如 :inclusion=>{:in=>r=(1..Vehicle.max_乘客),:min=>r.first,:max=>r.last} 我已经定义了以下类方法: :inclusion => {:in => r = (1..15), :min => r.first, :max => r.last} 当然没用了。我尝试过使用Procs和lambdas,但对我来说效果不好( 有人能帮我做这件事吗?可能吗?检查验证\u wi

这是我的工作代码。我想做的动态是“15”部分,例如

:inclusion=>{:in=>r=(1..Vehicle.max_乘客),:min=>r.first,:max=>r.last}

我已经定义了以下类方法:

:inclusion => {:in => r = (1..15), :min => r.first, :max => r.last}
当然没用了。我尝试过使用Procs和lambdas,但对我来说效果不好(
有人能帮我做这件事吗?可能吗?

检查
验证\u with
是否有帮助。这个助手将记录传递给一个单独的类进行验证,在这个类中,您可以通过读取一些配置等方式使验证条件动态化。 RubyonRails上提供了更多关于使用验证的信息

class-Person
检查
验证\u with
是否有帮助。此帮助程序将记录传递给单独的类进行验证,您可以在其中通过读取某些配置等方式使验证条件动态化。 RubyonRails上提供了更多关于使用验证的信息

class-Person
您正在寻找:

或者,您可以使用lambda尝试以下操作

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尝试以下操作

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
请注意,如果您在范围内使用
:中的
,则不需要最小/最大值。

请尝试以下操作:

def self.max_passengers
   1..15
end  


validates :attrib, :inclusion => {:in => lambda { |obj| ClassName.max_passengers } }
试试这个:

def self.max_passengers
   1..15
end  


validates :attrib, :inclusion => {:in => lambda { |obj| ClassName.max_passengers } }

你能发布你得到的错误吗?因为你发布的更改在我看来很好。范围:)或类似的值不正确。我让它工作了。。。但我无法得到“r”值:r.first,r.last。当我删除它们时,它会起作用,但当它们存在时,它会抛出,Class::classe没有max_方法。你能发布你得到的错误吗?因为您发布的更改在我看来很好。范围:)或类似的值不正确。我让它工作了。。。但我无法得到“r”值:r.first,r.last。当我删除它们时,它会工作,但当它们存在时,它会抛出,Class::class2没有max_方法定义一个常量怎么样?e、 g:
MAX\u乘客=15
然后:
:inclusion=>{:in=>r=(1..MAX\u乘客),:min=>r.first,:MAX=>r.last}
我想这就是您试图用类方法实现的目标。谢谢。这也是一个选择。只是,我知道一个事实,例如,这个构造将起作用:def self.max_乘客(1..10)结束,然后,使用lambda或proc,它将被正确嵌入。我就是不能得到它,为什么它有那么大的不同,当我只想要它的一部分时。定义一个常数怎么样?e、 g:
MAX\u乘客=15
然后:
:inclusion=>{:in=>r=(1..MAX\u乘客),:min=>r.first,:MAX=>r.last}
我想这就是您试图用类方法实现的目标。谢谢。这也是一个选择。只是,我知道一个事实,例如,这个构造将起作用:def self.max_乘客(1..10)结束,然后,使用lambda或proc,它将被正确嵌入。我就是拿不到,为什么它有那么大的不同,当我只想要它的一部分。
inclusion: { in: proc { 1..Vehicle.max_passengers } }