0

我有优惠券模型,在这个模型文件中我有一个合适的_for_use 方法。如果优惠券.suitable_for_use == true ,我想列出优惠券。有什么捷径可以做到吗?我写了这段代码,但它不起作用。

@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
4

1 回答 1

1

问题是您两次分配给@coupons。from 的返回值each是它被赋予的集合。因此,您的最后一行重新分配了返回的原始优惠券集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 的符号。它从字面上扩展到第二行中的块,并且在 ruby​​ 单行中很常见。

于 2013-02-24T02:33:08.150 回答