【问题标题】:how can I filter page content using multiple tags如何使用多个标签过滤页面内容
【发布时间】:2013-06-25 10:55:37
【问题描述】:

我是 Rails 的新手,我想使用多个标签过滤我的页面内容。我正在使用 act_as_taggable_on gem,并且我设法拥有一个标签云并根据标签过滤我的内容。我使用了以下教程(http://railscasts.com/episodes/382-tagging)。 现在我无法使用多个 tag_type 进行过滤。

我在我的模型/article.rb 中添加了以下代码

acts_as_taggable
act_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 页面吗?现在它显示了我所有的帖子,当我点击标签时,内容没有改变

【问题讨论】:

    标签: ruby-on-rails ruby acts-as-taggable-on tag-cloud acts-as-taggable


    【解决方案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
    

    调整:

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

    希望对你有帮助,祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      相关资源
      最近更新 更多