使用acts_as_taggable_on的奇怪行为

时间:2010-05-11 02:49:11

标签: ruby-on-rails acts-as-taggable acts-as-taggable-on

修改

Github上的说明指示您使用gem的gemcutter源。目前,这将安装2.0.5版,其中包含我在下面详述的错误。

@Vlad Zloteanu证明1.0.5不包含该bug。我也试过1.0.5并确认该版本中存在的错误。人们在2.x上挣扎着act_as_taggable_on并拥有标签,回滚并等待修复......


出于某种原因,当指定了标记符时,标记不会显示在可标记对象上。

测试帖子

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">]

helloworld标记在哪里?奇怪的是,如果我直接修改数据库以将tagger_idtagger_type设置为NULL,则会显示两个缺少的标记。我怀疑我的User模型有问题吗?是什么给了什么?


修改

更奇怪的是:

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

找到帖子!所以它可以从数据库中读取标签!怎么没有显示Post#tagsPost#tag_list

2 个答案:

答案 0 :(得分:3)

我使用完全相同的类重新创建了你的项目。

这是我的结果:

>> 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

答案 1 :(得分:0)

mbleigh发布了一个解决此问题的提交。 要获取所有标签,您可以使用owner_tags_on:

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

这是提交:http://github.com/mbleigh/acts-as-taggable-on/commit/3d707c25d45b5cc680cf3623d15ff59856457ea9

再见, Alessandro DS