2010-06-17 67 views
0

我有一个带有“description”字段的模型“Product”。现在,我希望在索引页面中有一个链接,单击该链接时将显示说明为空的所有产品(空)。如何使用named_scope过滤我的模型中的记录

在模型中我已经定义了一个named_scope这样

named_scope :no_description,  :conditions => { :description => "" } 

我已经检查了named_scope工作通过调用Product.no_description.count在控制台上。

据我所知,控制器然后应该处理链接上的“索引”操作的过滤器请求,但能够区分它与查看所有产品的默认值。

def index 
    @products = Product.all 
    ... 

我的问题越来越控制器处理不同的要求,什么路线设置为视图上的链接,然后在视图实际的链接。希望我解释我的问题。

回答

1

如果你的链接传入的参数,你可以检查这一点,在索引操作使用命名范围:

def index 
    if params[:no_description] 
     @products = Product.no_description 
    else 
     @products = Product.all 
    end 
end 

在你看来,你可以使用类似:

link_to('No description', products_path(:no_description => 1)) 
+0

我认为你有一个错字,它应该是'Product.all'等(单数)。另外,'link_to'末尾有一个缺失的括号。 – 2010-06-17 09:55:20

+0

@John我修复了这些错别字。谢谢。 – 2010-06-17 10:04:49

1

您可以采取两种基本方法。您可以设置新的路由和控制器操作以显示无描述的产品,也可以在超链接上使用查询字符串参数进行区分。我会采用第二种方法来避免因操作太多而使控制器混乱。

您的链接将会是这个样子,假设你使用RESTful routing

<%= link_to 'Products Without Descriptions', products_path(:filter => true) %> 

而这里的控制器动作,这看起来简单的参数是否存在(即不关心什么价值它有):

def index 
    if params[:filter] 
    @products = Product.no_description 
    else 
    @products = Product.all 
    end 
    ... 
end 
+0

感谢约翰,工作就像一个魅力 – kibyegon 2010-06-17 09:46:07

相关问题