7

如果用户选择预定义的过滤器链接,我的索引将如何根据该请求显示结果?

<h1>Products</h1>
<% @products.each do |product| %>
<%= link_to product.name, product_path(product) %>
<% end %>

<h2>Find Product by Category</h2>
Electronics
Apparel
Books

例如,我如何制作“电子产品”链接以过滤产品索引以仅包含具有“电子产品”类别的产品?“类别”字段/列已在我的数据库/模型中定义。

这是目前我的控制器的样子:

def index
  @products = Product.all
end

谢谢。

4

2 回答 2

15

使您的链接成为返回产品的链接,但将类别添加为 url 参数。

然后在您的控制器中,如果参数存在,则根据它过滤结果。如:

看法:

<h2> Find Product by Category </h2>
  <%= link_to "Electronics", products_path(:category=>"electronics")

控制器

def index
  if params[:category]
    @products = Product.where(:category => params[:category])
  else
    @products = Product.all
  end
end

根据 egyamado 的评论:

如果你想添加 Flash 消息,它会是这样的:

def index
  if params[:category]
    @products = Product.where(:category => params[:category])
    flash[:notice] = "There are <b>#{@products.count}</b> in this category".html_safe
  else
    @products = Product.all
  end
end

如果您只想在没有产品的情况下显示消息,则只需添加if @products.empty?到 flash 名称的末尾

或者,如果您想在没有产品时显示错误消息并在有产品时显示通知,则可以使其完全有条件

def index
  if params[:category]
    @products = Product.where(:category => params[:category])
    if @products.empty?
      flash[:error] = "There are <b>#{@products.count}</b> in this category".html_safe
    else
      flash[:notice] = "There are <b>${@products.count}</b> in this category".html_safe
    end
  else
    @products = Product.all
  end
end
于 2013-11-04T02:38:16.637 回答
0

非常感谢你的帖子。它也非常适合我的需求

我在链接中使用它 <td><%= link_to 'Show', candidates_path(:atc_name=>(atc.name)) %></td>

于 2017-03-15T17:51:16.060 回答