Has_one:通过多态性belongs_to

问题描述:

我有一个标记模型,与标签和可标记项目的多态关联。可标记项目都与feed_item(has_one:feed_item)有关联。我想将标记与feed_item关联,即在tagging.rb中Has_one:通过多态性belongs_to

belongs_to :taggable, :polymorphic => true 
    belongs_to :tag, :polymorphic => true 

    has_one :feed_item, :through => :taggable 

此has_one关联不起作用。例如在控制台Tagging.first.feed_item中导致错误

NameError: uninitialized constant Tagging::Taggable 

有关如何设置这种关联的建议?

对于背景,下面是一个可加标签对象的模型的一个例子:

has_one :feed_item, :as => :item 

IE:一个标记HAS_ONE可加标签对象,它HAS_ONE feed_item。

+0

什么是被调用来产生该错误? – Substantial 2012-02-15 05:47:43

+0

a = Tagging.first.feed_item – jay 2012-02-15 05:50:21

+0

你不能通过belongs_to has_one。 – Eric 2012-02-15 05:52:40

替换此:

has_one :feed_item, :through => :taggable 

与此:

def feed_item 
    self.taggable.feed_item 
end 

现在你可以调用@taggable.feed_item,它会工作。

+0

该方法将工作..但我不认为它真的是一个关联。我这样说,是因为我想通过这个协会来传达伟大的图景。例如,如果我有一个包含许多标签的文章,并且我现在想将该文章与has_many:feed_items,:through =>:tagging关联起来,那么这将无法将上述方法识别为关联。 (即Article.feed_items错误,表示否:标记模型中存在feed_item关联)。 – jay 2012-02-15 06:05:20

+0

什么? 'FeedItem'属于'Tagging'本身还是属于可标记对象('Article'等等)?请在'feed_item.rb'中发布关联。 – Substantial 2012-02-15 07:31:21

+0

@gg_s FeedItem属于TaggableObject(OP编辑帖子) – Rahul 2012-02-15 07:36:31

你可以看看https://github.com/rahul/SO_9288016,让我知道它是否不适合你。

我还添加了一个小的分贝/ development.sqlite3

+0

嘿拉胡尔,感谢您的帮助。您创建的应用看起来很好,但标记仍然与feed_item没有关联。即你不能写Tagging.first.feed_item,除非我错了。对? – jay 2012-02-15 14:38:11

+0

“Article to has_many:feed_items,:through =>:tagging” - 这是因为TaggingableObject已经存在:has_one:feed_item吗? – Rahul 2012-02-15 17:16:12

+0

在这种情况下@ gg_s的解决方案不应该工作吗? – Rahul 2012-02-15 17:16:43