0

我在一个小项目中使用 ActsAsTaggableOn 来看看这个 gem 的可能性。所以我有产品,产品可以有标签。

在我的产品 _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?(标签)我错过了什么或做错了什么。

有任何想法吗?感谢您的帮助 =)

干杯。

4

1 回答 1

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 %>

因此,我想检查该名称是否存在于列表中,而不是对象。

希望这可以帮助某人。

于 2011-08-29T20:35:19.637 回答