1

タグ付けを処理するために、いくつかのトリッキーなポリモーフィックな関係を書いています。

Tagモデルと、Taggingポリモーフィックに属するモデルがありtaggableます。

、、、を呼び出すことができるItemモデルがありhas_many :taggings, :as => :taggableます。has_many :tags, :through => :taggings@item.tags

これはすべて正常に機能しています。

Store別のモデルをミックスに取り入れたい-awhich has_many :items。を使用して、ストア内のすべてのアイテムに関連付けられているすべてのタグを検索できるようにしたい@store.tags

これが私が持っているものです:

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

ただし、これによりtaggings、実際のタグではなく、ストア内のアイテムに関連付けられているすべてが返されます。

ストアにhas_manyタグ、アイテム、タグ付けを指定するにはどうすればよいですか?

必要に応じてより多くの情報を投稿できます-情報過多を防止しようとしています!ありがとう :)

4

2 に答える 2

2

アソシエーションのソースは、、、、またはオプションのないアソシエーションでhas_manyある必要があります(情報についてはこの回答に感謝します)。belongs_tohas_onehas_many:through

一部の人々が成功したプラグインがありますが、私の場合、それは私のポリモーフィックな関連付けでは正しく機能していないようですtaggable

現時点では、私の解決策は次のfinder_sqlオプションを渡すことhas_manyです。

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
于 2010-08-05T04:23:02.007 に答える
0

プレーンなRubyで実行できます。

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

ただし、タグ/ウェア/アイテムの数が少ない場合を除いて、これは非効率的です。

于 2010-08-02T15:23:25.933 に答える