0

我是rails新手,我想使用muptiple标签过滤我的页面内容。我正在使用act_as_taggable_on gem,并设法使用标签云并根据标签过滤我的内容。我使用了以下教程(http://railscasts.com/episodes/382-tagging)。 现在我无法设法使用多个tag_types进行筛选。如何使用多个标签过滤页面内容

我在我的模型添加/ article.rb下面的代码

acts_as_taggable
acts_as_taggable_on:assetType,:productType

在控制器我不知道写多个标签。我尝试以下方法

def index 
    if (params[:assetType] and params[:productType]) 
    @articles = Article.tagged_with(params[:assetType]).tagged_with(params[:productType]) 
    else 
     @articles = Article.all 
    end 

    end 

在我看来,在index.html.erb我

<div id="tag_cloud"> 
    <% tag_cloud Article.productType_counts, %w[s m l] do |tag, css_class| %> 
    <%= link_to tag.name, tag_path(tag.name), class: css_class %> 
    <% end %> 
</div> 
<div id="tag_cloud_asset"> 
    <% tag_cloud Article.assetType_counts, %w[s m l] do |tag, css_class| %> 
    <%= link_to tag.name, tag_path(tag.name), class: css_class %> 
    <% end %> 
</div> 
<div class="article-content"> 
    <% @articles.each do |article| %>  
     <h3><%= article.title %></h3> 
     <p><%= article.content %></p> 

    <% end %> 

,在我_form我有

<%= form_for(@article) do |f| %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 
    </div> 
    <div class="field"> 
    <%= f.label :assetType_list, "Tags (Asset Type separated by commas)" %><br /> 
    <%= f.text_field :assetType_list %> 
    <%= f.label :productType_list, "Tags (Product Type separated by commas)" %><br /> 
    <%= f.text_field :productType_list %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 

有人能帮助我如何我应该修改我的控制器,索引和_form页面吗?现在它正显示出我的全部信息,并且当我点击标签内容没有改变

回答

1

使用这个作为基本参考点:

https://github.com/mbleigh/acts-as-taggable-on#finding-tagged-objects

试试这个:

def index 
    tags = [] 
    tags << params[:assetType] unless params[:assetType].blank? 
    tags << params[:productType] unless params[:productType].blank? 

    if tags.count == 2 
    @articles = Article.tagged_with(tags) 
    else 
    @articles = Article.all 
    end 
end 

调整:

  • 使用blan检查每个参数的空字符串和空字符串k检查。也许在这种情况下,null和blank可能是相同的。
  • 将标签添加到数组中,以便我可以一次全部传递它们。不仅仅是为了简化调用,还可以通过向调用添加其他参数(例如匹配所有或任何标记)来更明确地控制匹配样式。

希望有帮助,祝你好运!

+0

非常感谢你! – lucy

相关问题