0

私はレールの初心者で、複数のタグを使用してページのコンテンツをフィルタリングしたいと考えています。act_as_taggable_on gem を使用していますが、タグクラウドを使用して、タグに従ってコンテンツをフィルタリングすることができました。次のチュートリアル ( http://railscasts.com/episodes/382-tagging ) を使用しました。複数の tag_types を使用してフィルタリングすることができなくなりました。

model/ article.rb に次のコードを追加しました

act_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 ページをどのように変更すればよいですか? 今ではすべての投稿が表示されており、タグをクリックしてもコンテンツは変更されません

4

1 に答える 1

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 および空の文字列の各パラメーターをチェックします。おそらく、このコンテキストでは null と空白が同じである可能性があります。
  • タグを配列に追加して、一度にすべてを渡すことができるようにします。呼び出しを単純化するだけでなく、追加のパラメーターを呼び出しに追加することで、一致するスタイルをより明示的に制御できます (すべてまたは任意のタグに一致するなど)。

お役に立てば幸いです、頑張ってください!

于 2013-06-25T16:16:56.517 に答える