2012-12-21 163 views
1

假設我有一個控制器的方法:添加額外的過濾器參數

def my_find(is_published, count) 
    items = Idea.where(published: is_published) 
    #...... 
end 

有時候我想通過一些額外的過濾器參數

def my_find(is_published, count, some_extra_filter = nil) 
    items = Idea.where(published: is_published) #.where (some_extra_filter) 
    #...... 
end 

其中some_extra_filter可以lambda或只是一個普通的sql「其中」string,它也可以是nil或「」。

那麼我如何連接.where(published: is_published)where (some_extra_filter)得到我所需要的?

+0

考慮使用一些過濾器的寶石。我建議[ransack](https://github.com/ernie/ransack)或[元搜索](https://github.com/ernie/meta_search) – alek

回答

2

這其實是很容易的使用範圍:

def my_find 
    @items = Idea.scoped 
    @items = @items.where(published: is_published) unless is_published.nil? 
    @items = @items.where(other: other_param) if other_params < 10 
    # etc, etc 
end 
+0

如何將'@ items'轉換爲'Idea.all'有? –

+0

如果你願意,你可以在最後做'@ items.all',但你真的不需要。當您在視圖中執行諸如'@ items.each'之類的操作時,所有項目都將從數據庫中獲取。你不必擔心「類型」。 – Luke

相關問題