我花了很多时间在这一个上,现在我被卡住了。我目前正在尝试在我的应用中设置标记系统。我相信我的所有关联都是正确的,但是我的观点有问题。标签是使用自己的表单创建的。我想要做的是当用户创建一个新项目时,他们将能够从他们从标签表单创建的标签列表中进行选择。
以下是我的模特:
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>
正在创建标记,并且我的标记数据库中正确附加了项目和标记。但是,我需要帮助两件事:
我也是Rails的新手,想要在没有插件的情况下学习如何做到这一点。
答案 0 :(得分:1)
@tags
。你可能会像这样设置
@tags = Tag.all
将其更改为
@tags = current_user.tags
这里我假设你的Devise模型叫做 User 。您可能还需要采取一些预防措施,因为您现在只为经过身份验证的用户显示标记。
<% tag.name %>
替换为<%= tag.name %>
。答案 1 :(得分:0)
我终于明白了。我发布的show-item代码实际上是部分代码。在引用partial的视图中,我正在使用<% render @item %>
。所以在我的标签循环中,它应该是
<span>
<% item.tags.each do |tag| %>
...
不是@item.tags.each |tag| %>