作为标记的行为
我在使用gem时可以正常工作的问题上遇到问题。
我有一个模型:
class Resource < ActiveRecord::Base
acts_as_taggable
end
我可以为它添加标签,虽然它的tag_list
已填充:
$ a = ArchiveResource.new()
$ a.tag_list = ["one", "two", "three"]
$ a.tag_list # ["one", "two", "three"]
但是,它的tag
关联不是:
$ a.tags # []
如果我检查所有标签,我可以看到它们正在创建中:
$ ActsAsTaggableOn::Tag.all #<ActsAsTaggableOn::Tag id: 1, name: "one">,
#<ActsAsTaggableOn::Tag id: 2, name: "two">,
#<ActsAsTaggableOn::Tag id: 3, name: "three">
如果我检查模型的taggings
关联,我可以看到它们存在于那里:
$ a.taggings #<ActsAsTaggableOn::Tag id: 1, name: "one">,
#<ActsAsTaggableOn::Tag id: 2, name: "two">,
#<ActsAsTaggableOn::Tag id: 3, name: "three">
仔细查看对a.tags.all
的调用,我可以从查询中看到存在不匹配:
ActsAsTaggableOn::Tag Load (0.9ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = 1 AND "taggings"."taggable_type" = 'ArchiveResource' AND (taggings.context = ('tags'))
然而, taggings_context
模型的引用的Tagging的都设置为tag
奇异,所以查询总是失败:
<ActsAsTaggableOn::Tagging id: 1, tag_id: 1, taggable_id: 1, taggable_type: "Resource", tagger_id: nil, tagger_type: nil, context: "tag", created_at: "2013-09-10 17:12:20
<ActsAsTaggableOn::Tagging id: 2, tag_id: 1, taggable_id: 1, taggable_type: "Resource", tagger_id: nil, tagger_type: nil, context: "tag", created_at: "2013-09-10 17:12:20
<ActsAsTaggableOn::Tagging id: 3, tag_id: 1, taggable_id: 1, taggable_type: "Resource", tagger_id: nil, tagger_type: nil, context: "tag", created_at: "2013-09-10 17:12:20
如果我运行所有的Taggables并将上下文设置为tags
,则一切正常:
ActsAsTaggableOn::Tagging.all.each{|t|t.context = "tags"; t.save!}
那么为什么会这样呢。 这是一个错误还是我做错了什么?
看起来像默认的实现被破坏。 通过显式声明标签为:tags
一切工作正常:
acts_as_taggable_on :tags
链接地址: http://www.djcxy.com/p/35943.html
上一篇: Acts As Taggable On