Rails 充当可标记的--多上下文标记过滤器

Rails Acts as Taggable On--Multiple Context Tag filter

我正在使用 acts-as-taggable-on 来标记汽车模型。我有三个不同的标记上下文:品牌、颜色和特征。前两个品牌和颜色是在 ENV 变量中预定义的,最后一个上下文是用户生成的(自动 windows、加热座椅等)

我想做的是让我的索引页面中的汽车可以一次被多个标签过滤。因此,例如,我希望在索引页面顶部有一系列复选框,每个上下文都有一个单独的集合,用户可以在其中检查现代和红色,而汽车索引将只填充红色现代。目前,我的汽车控制器中有一条路线和一些代码,允许我按一个标签进行过滤,但我想修改它以按用户选择的任何内容进行过滤。

routes.rb

  get 'tags/:tags', to: 'cars#index', as: :tag

控制器

def index
 if params[:keyword].present?
  @cars = Car.tagged_with(params[:keyword])
 else
  @cars = Car.all.order(:cached_weighted_score => :desc)
 end
end

@selected_tag是在索引页中被选为参数的标签。

控制器

def index
 if params[:keyword].present?
  @selected_tag = params[:keyword]
  @cars = Car.tagged_with(params[:keyword])
 else
  @cars = Car.all.order(:cached_weighted_score => :desc)
 end
end

查看

这只是原型视图,因此您必须结合自己的代码。

<% @tags.each do |tag| %>
    <div>
      <%= check_box_tag "keywords[]", tag.name, @selected_tag.present? ? @selected_tag.include?(tag.name) : '' %>
      <%= tag.name %>
    </div>
<% end %>

我希望我的描述能给出一个大概的概述。 欲了解更多信息prepopulate data in checkbox