2010-09-12 16 views
5

2 modelim var: notlar ve etiketler.Raylar ActiveRecord: HABTM parametreleri bul

class Note < ActiveRecord::Base 
    has_and_belongs_to_many :tags 
end 

class Tag < ActiveRecord::Base 
    has_and_belongs_to_many :notes 
end 

Etiket, bir ad (örn. "Rss", "javascript" vs.) vardır. Belirli bir etiket listesine sahip tüm notları almanın en iyi yolu nedir? Yani, /notes/with_tags/rss,javascript gibi adlandırılmış bir rotaya sahip olmak ve find_with_tags() adlı Not adlı bir sınıf yöntemine gereksinim duymak istiyorum.

Yani, nasıl yapıyorsun bu: Şu anda Tag.find_all_by_name(['xml','rss']).map(&:notes).flatten.uniq kullanıyorum, ama orada olduğunu düşünüyorum

class Note 
    def self.find_with_tags(tags) 
    ????? 
    end 
end 

değilim gerçi de (bunu yapabilirsiniz daha iyi bir yolu

+0

nasıl: Sonunda

class Note < ActiveRecord::Base has_many :notes_tags has_many :tags, :through => :notes_tags def self.find_with_tags(*tags) all(:joins => :notes_tags, :conditions => ["notes_tags.tag_id in (select id from tags where name in (?))", tags], :group => 'notes.id') end end 
Eimantas

+0

Teşekkürler, bunu gördüm. Böyle bir şeyi nasıl yapacağının mekaniği hakkında daha çok merak ediyordum. –

cevap

3

, bu aradığım şey bu?
1

olmak Sağlanan etiketlerden biriyle tüm notları da geri gönderecek olan SQL sorgularını yazmak için gerçekten büyük bir hayran. eylemleri-as-taggable-on eklenti/taş kullanımı hakkında

Note.find(:all, :include=>:tags, :conditions => ['tags.name in (?)',['rss','xml']]) 
İlgili konular