在Rails中使用自定义标记

时间:2012-05-20 18:00:05

标签: ruby ruby-on-rails-3 tags

我花了很多时间在这一个上,现在我被卡住了。我目前正在尝试在我的应用中设置标记系统。我相信我的所有关联都是正确的,但是我的观点有问题。标签是使用自己的表单创建的。我想要做的是当用户创建一个新项目时,他们将能够从他们从标签表单创建的标签列表中进行选择。

以下是我的模特:

class Item < ActiveRecord::Base
  attr_accessible :title, :media, :tag_ids
  belongs_to :user
  has_many :taggings, :dependent => :destroy
  has_many :tags, :through => :taggings
end

class Tag < ActiveRecord::Base
  attr_accessible :name
  belongs_to :user
  has_many :taggings, :dependent => :destroy  
  has_many :items, :through => :taggings
end

以下是我认为有缺陷的观点。项目形式:

<%= form_for @item, :html => { :multipart => true } do |f| %>
  <div class="field">
    <%= f.file_field :media %>

    <%= f.text_field :title, placeholder: "Add title..." %>

    <% @tags.each do |tag| %>
        <div>
            <%= check_box_tag "item[tag_ids][]", tag.id, @item.tags.include?(tag) %>
            <%= tag.name %>
        </div>
    <% end %>
</div>
  

显示项目视图:

<li>
  <span class="title"><%= item.title %></span>
  <%= image_tag item.media.url(:small) %>
  <span>
    <% @item.tags.each do |tag| %>
      <% tag.name %>
    <% end %>
  </span>
  <span class="timestamp">
    Posted <%= time_ago_in_words(item.created_at) %> ago.
  </span>
  <%= link_to "delete", item, method:  :delete, confirm: "You sure?", title:   item.title %>
</li>

正在创建标记,并且我的标记数据库中正确附加了项目和标记。但是,我需要帮助两件事:

  1. 如何更改check_box_tag以仅显示当前用户创建的标签(我正在使用Devise)?
  2. 为什么项目视图中没有标签显示?
  3. 我也是Rails的新手,想要在没有插件的情况下学习如何做到这一点。

2 个答案:

答案 0 :(得分:1)

1。您可以更改控制器中的@tags

你可能会像这样设置

@tags = Tag.all

将其更改为

@tags = current_user.tags

这里我假设你的Devise模型叫做 User 。您可能还需要采取一些预防措施,因为您现在只为经过身份验证的用户显示标记。

2。您必须将<% tag.name %>替换为<%= tag.name %>

答案 1 :(得分:0)

我终于明白了。我发布的show-item代码实际上是部分代码。在引用partial的视图中,我正在使用<% render @item %>。所以在我的标签循环中,它应该是

<span>
  <% item.tags.each do |tag| %>
    ...

不是@item.tags.each |tag| %>