0

ユーザーモデルとブランドモデル、およびacts_as_taggable_onが与えられた場合、それぞれ2つのタグでブランドにタグを付けた2人のユーザーがいます。次に、コンソールで:

>> b = Brand.last
=> #<Brand id: 37, name: "herp", user_id: nil>
>> b.users.count
=> 2
>> b.tags
=> [#<ActsAsTaggableOn::Tag id: 24, name: "firsttag">, #<ActsAsTaggableOn::Tag id: 25, name: "lasttag">]

これらは、最初のユーザーからのブランドbのタグです。最後のユーザーのタグは表示されていません。なんで?

編集:レールの使用3.0.9

  • ブランドhas_manyタグ、has_many brand_users、has_manyユーザーからbrand_usersまで
  • ユーザーhas_many:brand_usersおよびhas_many:brands、:through =>:brand_users
  • BrandUserbelongs_to:brandおよびbelongs_to:user

以下は私のスキーマです:

ActiveRecord::Schema.define(:version => 20110824083919) do

  create_table "brand_users", :force => true do |t|
    t.integer  "brand_id"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "brands", :force => true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "user_id"
  end

  create_table "taggings", :force => true do |t|
    t.integer  "tag_id"
    t.integer  "taggable_id"
    t.string   "taggable_type"
    t.integer  "tagger_id"
    t.string   "tagger_type"
    t.string   "context"
    t.datetime "created_at"
  end

  add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
  add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"

  create_table "tags", :force => true do |t|
    t.string "name"
  end

  create_table "users", :force => true do |t|
    t.string   "provider"
    t.string   "uid"
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end
4

1 に答える 1

0

私は宝石を適切に使用していませんでした。Acts_as_taggable_onのcore.rbファイルを調べると、all_tags_on(context)が見つかります。b.tagsを使用すると、(SQLクエリで見られるように)タガーなしですべてのタグが呼び出されるため、以下を使用すると、tagger_typeまたはtagger_idを持つすべてのタグに対する回答が得られます。

b.all_tags_on(:tags)
于 2011-09-01T21:43:41.127 に答える