1

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

这是我的模型:

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 以仅显示当前用户创建的标签(我正在使用设计)?
  2. 为什么项目视图中没有标签显示?

我也是 Rails 的新手,想学习如何在没有插件的情况下做到这一点。

4

2 回答 2

1

1.你可以改变@tags你的控制器。

你可能是这样设置的

@tags = Tag.all

将其更改为

@tags = current_user.tags

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

2.你必须替换<% tag.name %><%= tag.name %>

于 2012-05-20T19:17:17.303 回答
0

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

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

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

于 2012-06-04T20:15:21.080 回答