我是rails的新手,我想使用muptiple标签过滤我的页面内容。我使用的是act_as_taggable_on-gem,我设法拥有了一个标签云,并根据标签过滤我的内容。我使用了以下教程(http://railscasts.com/episodes/382-tagging)。现在我无法使用多个标签类型进行筛选。
我在我的模型/文章.rb中添加了以下代码
acts_as_taggable
acts_as_tagtable_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>
有人能帮我如何修改我的控制器、索引和表单页吗?现在它显示了我所有的帖子,当我点击标签时,内容没有改变
将此作为基本参考点:
https://github.com/mbleigh/acts-as-taggable-on#finding-标记对象
试试这个:
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和blank可能是相同的
- 将标记添加到数组中,这样我就可以一次传递所有标记。不仅为了简化调用,还可以通过向调用中添加额外的参数(例如匹配所有或任何标记)来对匹配样式进行更明确的控制
希望有帮助,祝你好运!