我的模型“产品”带有“描述”字段。现在我希望在索引页面中有一个链接,单击该链接时将显示描述为空(空)的所有产品。
在模型中我定义了一个像这样的
的named_scopenamed_scope :no_description, :conditions => { :description => "" }
我已经通过在控制台上调用Product.no_description.count来检查named_scope的工作原理。
据我所知,控制器应该处理来自“索引”操作链接的过滤请求,但能够将其与默认区分开,即查看所有产品。
def index
@products = Product.all
...
我的问题是让控制器处理不同的请求,为视图上的链接设置的路由以及视图上的实际链接。希望我解释了我的问题。
答案 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