代码之家  ›  专栏  ›  技术社区  ›  nfm

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

  •  1
  • nfm  · 技术社区  · 14 年前

    我正在写一些复杂的多态关系来处理标记。

    我有一个 Tag Tagging 属于多态的模型 taggable

    我有一个 Item 模型,哪个 has_many :taggings, :as => :taggable has_many :tags, :through => :taggings ,这样我就可以打电话了 @item.tags

    一切正常。

    Store 哪一个 has_many :items @store.tags .

    以下是我所拥有的:

    class Store < AR::Base
      has_many :items
      has_many :tags, :through => :items, :source => :taggings
    

    但是,这会返回所有 taggings

    如何指定商店有多个标签,通过商品,通过标签?

    可以张贴更多的信息,如果需要-试图防止信息过载!谢谢:)

    2 回复  |  直到 14 年前
        1
  •  2
  •   Community Nick Dandoulakis    7 年前

    has_many belongs_to has_one ,或 你有很多 没有 :through this answer 信息)。

    a plugin 有些人已经成功了,但在我的情况下,它似乎没有正确地与我的工作 taggable

    目前,我的解决办法是通过 finder_sql 选择 你有很多

    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
  •  0
  •   François Beausoleil    14 年前

    你可以用普通红宝石做:

    site.wares.map(&:tags).flatten.uniq
    

    不过,这将是低效的,除非您的标签/商品/项目数量较少。