2012-12-21 165 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

相关问题