2013-02-24 88 views
0

我已經優惠券模式在這個模型文件我有一個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 

suitable_for_use方法

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 
+0

你可以粘貼'suitable_for_use'的代碼嗎? – Cluster 2013-02-24 02:27:52

+0

什麼是is_used的代碼?我在問,因爲這裏最好的選擇是一個AR範圍。 – Cluster 2013-02-24 02:46:36

回答

1

問題是你分配兩次@coupons。來自each的返回值是它給出的集合。因此,您的最後一行重新分配了由Coupon.all返回的原始優惠券組。

@coupons = Coupon.all.select(&:suitable_for_use) 

如果你不確定這是什麼,這是擴展版本。

@coupons = Coupon.all.select {|coupon| coupon.suitable_for_select} 

基本上,選擇需要一個塊,它會迭代,如果塊返回true,那麼它會將該元素添加到返回的集合。所以返回false的任何優惠券都不會被select返回。

&:suitable_for_use被稱爲過程符號。它從字面上擴展到第二行的區塊,在紅寶石單行中很常見。

+0

未定義的方法'>'爲零:NilClass我得到這個錯誤。 – 2013-02-24 02:39:14

+0

是您的優惠券之一的「開始」零?您第二次入住的唯一通話位置是合適的。 – Cluster 2013-02-24 02:45:30

+0

我解決了在合適的檢查中添加行「elsif self.start.nil?|| self.end.nil?result = false」的問題。謝謝集羣 – 2013-02-24 02:49:16