2011-09-12 37 views
1

我有範圍Rails的2例範圍

scope :for_list, lambda { |brand_ids| 
    where('brands.id IN (?)', brand_ids).includes(:models).where("models.popular = '1'").order('models.name') 
} 

但有些時候沒有models.popular = 1

而且在這種情況下,我想選擇所有從模型忽略popular參數

如何編寫該範圍?

回答

1

由於它只是一個lambda函數,因此您可以在其中使用if/else,它將在調用時進行評估。因此,你可以寫這樣的範圍:

scope :for_list, lambda { |brand_ids| 
    if self.popular > 1 
      where('brands.id IN (?)', brand_ids).includes(:models).where("models.popular = '1'").order('models.name') 
    else 
      where('brands.id IN (?)', brand_ids).includes(:models).order('models.name') 
    end 
} 

這應該工作。不過,我謹慎使用這一點。該邏輯不屬於範圍。相反,你應該問你的意見和控制器設置和重做這些。