Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 - Fatal编程技术网

Ruby on rails 如何在rails中使用proc进行验证

Ruby on rails 如何在rails中使用proc进行验证,ruby-on-rails,ruby,Ruby On Rails,Ruby,item.rb 我有: enum类型:{only_rent:0,rent_buy:1,only_one:2} 现在我想知道,如果type=“only_one”,“rental_by”,那么价格将>0,反之亦然,如果它是“only_rental then=0” 验证:price,allow\u nil:true,numericanity:{ 仅_整数:true, 大于:0, 少于:1000000, } 验证:price,如果:proc{!only_rental?} 我试了以下方法,但似乎不起作用

item.rb

我有:
enum类型:{only_rent:0,rent_buy:1,only_one:2}

现在我想知道,如果type=“only_one”,“rental_by”,那么
价格将>0,反之亦然,如果它是“only_rental then=0”

验证:price,allow\u nil:true,numericanity:{
仅_整数:true,
大于:0,
少于:1000000,
}
验证:price,如果:proc{!only_rental?}
我试了以下方法,但似乎不起作用

验证:price,allow\u nil:true,numericanity:{
仅_整数:true,
大于:0,
少于:1000000,
},除非:Proc.new{only_rental?}

您可以将
lambda
语法用于
Proc.new{only_rent?}
作为
->{only_rent?}
我更喜欢使用
validates
验证格式,并将逻辑放入
validate
方法中:

validates :price, allow_nil: true, numericality: { only_integer: true, less_than: 1000000 }
validate :price_amount

def price_amount
  if only_rental?
    price.zero?
  else
    price.positive?
  end
end
您还可以将Rails的
与_选项一起使用

with_options allow_nil: true, numericality: { only_integer: true, less_than: 1000000 } do
  validates :price, numericality: { greater_than: 0 }, unless: :only_rental?
  validates :price, numericality: { in: [0] },         if:     :only_rental?
end


如果是这样,它将与我的问题相反,type=only_rent,`type=“only_rent”仍将更新并根据Proc/lamda块中的要求调整条件