首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rails中指定通过多个模型的关联

问如何在Rails中指定通过多个模型的关联
EN

Stack Overflow用户
提问于 2010-08-02 12:23:47
回答 2查看 186关注 0票数 1

我正在编写一些棘手的多态关系来处理标签。

我有一个Tag模型,和一个Tagging模型,它belongs_to一个多态的taggable。

我有一个Item模型,它是has_many :taggings, :as => :taggable和has_many :tags, :through => :taggings,所以我可以调用@item.tags。

这一切都正常工作。

我想引入另一个模型-- has_many :items的Store。我希望能够使用@store.tags找到与商店中所有商品相关联的所有标签。

这就是我所拥有的:

代码语言:javascript
复制
class Store < AR::Base
  has_many :items
  has_many :tags, :through => :items, :source => :taggings

但是,这将返回与商店中的商品相关联的所有taggings,而不是实际的标签。

如何指定商店的has_many标签,通过商品,通过标签?

如果需要,可以发布更多信息-努力防止信息过载!谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-05 12:23:02

has_many关联的源必须是不带:through选项的belongs_to、has_one或has_many关联(感谢this answer提供信息)。

有些人已经成功地使用了a plugin,但在我的例子中,它似乎不能正确地与我的taggable多态关联一起工作。

目前,我的解决方案是向has_many传递一个finder_sql选项

代码语言:javascript
复制
class Store < ActiveRecord::Base
  has_many :items
  has_many :tags, :finder_sql => 
    'SELECT tags.* from tags
      INNER JOIN taggings on tags.id = taggings.tag_id
      INNER JOIN items on items.id = taggings.taggable_id AND taggings.taggable_type = "Item"
      WHERE items.store_id = #{id}'

end
票数 2
EN

Stack Overflow用户

发布于 2010-08-02 23:23:26

你可以在普通的Ruby中做到:

代码语言:javascript
复制
site.wares.map(&:tags).flatten.uniq

但是,这将是低效的,除非你的标签/商品/项目数量很少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3384969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档