繁体   English   中英

Rails模型动作检查

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM