如何使用named_scope过滤模型中的记录

时间:2010-06-17 09:09:31

标签: ruby-on-rails named-scope

我的模型“产品”带有“描述”字段。现在我希望在索引页面中有一个链接,单击该链接时将显示描述为空(空)的所有产品。

在模型中我定义了一个像这样的

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

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

据我所知,控制器应该处理来自“索引”操作链接的过滤请求,但能够将其与默认区分开,即查看所有产品。

 def index
    @products = Product.all
    ...

我的问题是让控制器处理不同的请求,为视图上的链接设置的路由以及视图上的实际链接。希望我解释了我的问题。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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