Почему не все теги возвращаются?

Учитывая модель пользователя и модель бренда, а также act_as_taggable_on, у меня есть 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">]

Это теги для Brand b только от первого пользователя. Теги от последнего пользователя не отображаются. Почему?

Изменить: использование рельсов 3.0.9

  • Марка has_many тегов, has_many brand_users и has_many пользователей через brand_users
  • Пользователь has_many :brand_users и has_many :brands, :through => :brand_users
  • BrandUser принадлежит_кому:бренд и принадлежит_кому:пользователь

Ниже моя схема:

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

person Simpleton    schedule 01.09.2011    source источник
comment
Аналогично stackoverflow.com/questions/7273768/, за исключением того, что здесь каждый бренд должен возвращать все теги для объекта Brand, а не для объекта BrandUser.   -  person Simpleton    schedule 01.09.2011


Ответы (1)


Я не использовал драгоценный камень должным образом. Просматривая файл core.rb act_as_taggable_on, вы найдете all_tags_on(context). Использование b.tags вызывает все теги без tagger (как видно из SQL-запроса), поэтому использование следующего дает ответ для всех тегов с tagger_type или tagger_id:

b.all_tags_on(:tags)
person Simpleton    schedule 01.09.2011