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块中的要求调整条件