我正在一个小项目中使用ActsAsTaggableOn,看看这个宝石有什么可能性。 所以我有产品和产品可以有标签。
在我的产品_form
中<%= form_for(@product) do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
Tags<br />
<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
<%= check_box_tag 'product[tag_list][]',tag.name,@product.tag_list.include? (tag),:class => css_class %>
<%= tag.name %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
在ProductController中,我定义了tag_cloud方法
def tag_cloud
@tags = Product.tag_counts_on(:tags)
end
因此,在我的编辑产品中,我可以使用复选框标记产品,但如果产品已经有标签,则不会选中这些复选框。我假设在这里@ product.tag_list.include? (标签)我错过了什么或做错了什么。
有什么想法吗?谢谢你的帮助=)
干杯。
答案 0 :(得分:3)
今天,经过仔细阅读后,我找到了答案。
这一行
<%= check_box_tag 'product[tag_list][]',tag.name,@product.tag_list.include? (tag),:class => css_class %>
应该是
<%= check_box_tag 'product[tag_list][]',tag.name,@product.tag_list.include? (tag.name),:class => css_class %>
因此,我想检查列表中是否存在该名称,而不是对象。
希望这有助于某人。