1

태그 지정을 처리하기 위해 까다로운 다형성 관계를 작성하고 있습니다.여러 모델을 통과하는 레일스에서 ​​연결을 지정하는 방법

나는 Tag 모델을 가지고 있고 Tagging 모델은 다형 taggable에 속합니다.

나는 모델이고 has_many :taggings, :as => :taggablehas_many :tags, :through => :taggings이므로 @item.tags을 호출 할 수 있습니다.

모두 괜찮습니다.

다른 모델을 Storehas_many :items으로 가져오고 싶습니다. @store.tags을 사용하여 상점의 모든 상품과 관련된 모든 태그를 찾을 수 있기를 원합니다.

여기에 내가 가진 무엇 :

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

그러나,이 가게에있는 항목이 아닌 실제 태그와 관련된 taggings을 모두 반환합니다.

상점에서 태그가있는 항목을 통해 has_many 태그를 지정하려면 어떻게합니까?

정보 과부하 방지를 위해 추가 정보를 게시 할 수 있습니다! 감사합니다 :)

답변

2

has_many 협회의 소스는:through 옵션 (정보 this answer 덕분에)없이 belongs_to, has_one, 또는 has_many 협회 해야합니다.

사람들이 성공한 사람은 a plugin이지만, 제 경우에는 taggable 다형성 연관이 제대로 작동하지 않는 것 같습니다.

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 
: 순간

, 내 솔루션은 finder_sql 옵션 has_many에를 전달하는 것입니다

0

당신은 일반 루비에서 할 수있는 : 당신이 태그/상품/항목의 낮은 번호가없는 한

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

이,하지만 비효율적 인 것입니다.

관련 문제