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>

タグが作成され、アイテムとタグの両方がタグ付けデータベースに適切に添付されています。ただし、次の2つの点でサポートが必要です。

  1. 現在のユーザー(私はDeviseを使用しています)によって作成されたタグのみを表示するようにcheck_box_tagを変更するにはどうすればよいですか?
  2. アイテムビューにタグが表示されないのはなぜですか?

Railsも初めてで、プラグインなしでこれを行う方法を学びたいと思っています。

4

2 に答える 2

1

@tags1.コントローラーでを変更できます。

あなたはおそらくそれをこのように設定しています

@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 に答える