[英]rails model action check
我有优惠券模型 ,在这个模型文件,我有一个suitable_for_use method.I要列出如果coupon.suitable_for_use ==真 。是有优惠券的任何短期的方式做到这一点? 我写了这段代码,但是没有用。
@coupons = []
coupons = Coupon.all.each do |coupon|
if coupon.suitable_for_use
@coupons << coupon
end
end
@coupons = coupons
适合使用的方法
def suitable_for_use
result = true
if is_used?
result = false
elsif self.start > Time.now.in_time_zone
result = false
elsif self.end < Time.now.in_time_zone
result = false
end
return result
end
问题是您两次分配了@coupons。 each
对象的返回值是它给出的集合。 因此,您的最后一行重新分配了Coupon.all
返回的原始优惠券Coupon.all
。
@coupons = Coupon.all.select(&:suitable_for_use)
如果您不确定这样做是什么,请使用扩展版本。
@coupons = Coupon.all.select {|coupon| coupon.suitable_for_select}
基本上,select接受一个要迭代的块,如果该块返回true,则它将将该元素添加到返回的集合中。 因此,任何返回false的优惠券都不会被select返回。
&:suitable_for_use称为proc的符号。 它实际上扩展到第二行中的块,并且在红宝石单线中很常见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.