0

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

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

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

我通过在控制台上调用 Product.no_description.count 来检查 named_scope 是否有效。

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

 def index
    @products = Product.all
    ...

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

4

2 回答 2

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))
于 2010-06-17T09:17:51.167 回答
1

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

假设您使用的是RESTful 路由,您的链接将如下所示:

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

这是控制器动作,它简单地寻找参数的存在(即它不关心它有什么值):

def index
  if params[:filter]
    @products = Product.no_description
  else
    @products = Product.all
  end
  ...
end
于 2010-06-17T09:25:28.107 回答