ruby-on-rails - Rails 使用链接(无下拉菜单)过滤索引结果

标签 ruby-on-rails ruby-on-rails-3

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

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

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

例如,如何创建“电子产品”链接来过滤产品索引,使其仅包含“电子产品”类别的产品? “类别”字段/列已在我的数据库/模型中定义。

这就是我的 Controller 目前的样子:

def index
  @products = Product.all
end

谢谢。

最佳答案

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

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

查看:

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

Controller

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

基于egyamado的评论:

如果您想添加即时消息,则如下所示:

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

关于ruby-on-rails - Rails 使用链接(无下拉菜单)过滤索引结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760527/

相关文章:

ruby-on-rails - Ruby on Rails 的 Oracle XE 连接配置

ruby-on-rails - 使用 Spork 和 Guard 时启动错误

ruby-on-rails - 从固定装置切换到工厂女孩

ruby-on-rails - 在 Windows cmd 上显示 unix 颜色(例如 ←[31m)

ruby-on-rails - 如何在 Rails 中编写作用域?

ruby-on-rails - 如何访问以前的updated_at?

ruby-on-rails - 如何使用 I18n gem 翻译电子邮件正文?

ruby-on-rails - rails 3 : How to implement multiple checkboxes in a form?

ruby-on-rails - 调用 Flash 消息 html_safe 有什么危险吗?

ruby-on-rails - Rails .megabytes 方法返回错误值