странное поведение с acts_as_taggable_on - PullRequest
3 голосов
/ 11 мая 2010

Редактировать

Инструкции на Github инструктируют вас использовать источник драгоценного камня для драгоценного камня. В настоящее время устанавливается версия 2.0.5, в которой есть ошибка, о которой я подробно рассказал ниже.

@ Влад Злотяну демонстрирует, что 1.0.5 не включает ошибку. Я также пробовал с 1.0.5 и подтверждаю, что ошибка не существует в этой версии. Люди, борющиеся с act_as_taggable_on и владеющие тегами на 2.x, откатятся и ждут исправления ..


По какой-то причине теги не отображаются на тегируемом объекте, когда указан теггер.

тестирование поста

class Post < ActiveRecord::Base
  acts_as_taggable_on :tags
  belongs_to :user
end

>> p = Post.first
=> #<Post id: 1, ...>
>> p.is_taggable?
=> true
>> p.tag_list = "foo, bar"
=> "foo, bar"
>> p.save
=> true
>> p.tags
=> [#<Tag id: 1, name: "foo">, #<Tag id: 2, name: "bar">]

тестирование пользователя

class User < ActiveRecord::Base
  acts_as_tagger
  has_many :posts
end

>> u = User.first
=> #<User id: 1, ...>
>> u.is_tagger?
=> true
>> u.tag(p, :with => "hello, world", :on => :tags)
=> true
>> u.owned_tags
=> [#<Tag id: 3, name: "hello">, #<Tag id: 4, name: "world">]

обновить сообщение

>> p = Post.first
=> #<Post id: 1 ...>
>> p.tags
=> [#<Tag id: 2, name: "bar">, #<Tag id: 1, name: "foo">]

Где теги hello и world? Чудесным образом, если я изменю базу данных напрямую, установив tagger_id и tagger_type на NULL, появятся два отсутствующих тега. Я подозреваю, что что-то не так с моей User моделью? Что дает?


EDIT

Даже незнакомец:

Post.tagged_with("hello")
#=> #<Post id: 1, ...>

находит почту! Таким образом, он может прочитать тег из базы данных! Почему это не появляется с Post#tags или Post#tag_list?

Ответы [ 2 ]

3 голосов
/ 18 мая 2010

Я воссоздал ваш проект, используя точно такие же классы.

Это мой результат:

>> Post.create
=> #<Post id: 1, created_at: "2010-05-18 09:16:36", updated_at: "2010-05-18 09:16:36">
>> p = Post.first
=> #<Post id: 1, created_at: "2010-05-18 09:16:36", updated_at: "2010-05-18 09:16:36">
>> p.is_taggable?
=> true
>> p.tag_list = "foo, bar"
=> "foo, bar"
>> p.save
=> true
>> p.tags
=> [#<Tag id: 1, name: "foo">, #<Tag id: 2, name: "bar">]
>> User.create
=> #<User id: 1, created_at: "2010-05-18 09:17:02", updated_at: "2010-05-18 09:17:02">
>> u = User.first
=> #<User id: 1, created_at: "2010-05-18 09:17:02", updated_at: "2010-05-18 09:17:02">
>> u.is_tagger?
=> true
>> u.tag(p, :with => "hello, world", :on => :tags)
=> true
>> u.owned_tags
=> [#<Tag id: 3, name: "hello">, #<Tag id: 4, name: "world">]
>> p = Post.first
=> #<Post id: 1, created_at: "2010-05-18 09:16:36", updated_at: "2010-05-18 09:16:36">
>> p.tags
=> [#<Tag id: 1, name: "foo">, #<Tag id: 2, name: "bar">, #<Tag id: 3, name: "hello">, #<Tag id: 4, name: "world">]

Поэтому я не могу повторить вашу ошибку. Я пробовал это и с mysql и с sqlite.

Это из моего файла env:

config.gem "mbleigh-acts-as-taggable-on", :source => "http://gems.github.com", :lib => "acts-as-taggable-on "

Это моя версия драгоценного камня:

gem list | grep taggable
mbleigh-acts-as-taggable-on (1.0.5)

Можете ли вы опубликовать свою версию гема? Можете ли вы попробовать обновить свой драгоценный камень? Какую БД вы используете?

Если это не сработает, вы также можете опубликовать вывод с tail -f log/development.log?

РЕДАКТИРОВАТЬ: я использую Rails 2.3.5

0 голосов
/ 26 июня 2010

mbleigh выпустил коммит, который решил эту проблему. Для получения ВСЕХ тегов вы можете использовать owner_tags_on:

p = Post.first
p.owner_tags_on(nil, :tags )

Это коммит: http://github.com/mbleigh/acts-as-taggable-on/commit/3d707c25d45b5cc680cf3623d15ff59856457ea9

До свидания, Алессандро ДС

...