Raylar ilişkili kayıt no 3 olan kayıtları bulmak istiyorum
Basit bir dernek düşünün...
class Person
has_many :friends
end
class Friend
belongs_to :person
end
Öncesinde ve/veya meta_where HİÇ arkadaşları olan kişiler için en temiz yolu nedir?
Ve sonra bir has_many :sürüm ile ilgili
class Person
has_many :contacts
has_many :friends, :through => :contacts, :uniq => true
end
class Friend
has_many :contacts
has_many :people, :through => :contacts, :uniq => true
end
class Contact
belongs_to :friend
belongs_to :person
end
Gerçekten has_many :ile olmuyor okuduğum kadarıyla counter_cache - ve ben kullanmak istemiyorum
Tüm insan çekmek istemiyorum.Ruby kayıtları ve döngü onları arkadaş - meta_search gem ile kullanabileceğim sorgu/kapsam istiyorum
Sorgular, performans maliyet umurumda değil
Ve gerçek SQL daha uzağa, daha uzağa...
CEVAP
Daha iyi:
Person.includes(:friends).where( :friends => { :person_id => nil } )
Temelde aynı şey, hmt için, hiç arkadaşı olmayan bir kişi de temasları olacak aslında güveniyor:
Person.includes(:contacts).where( :contacts => { :person_id => nil } )
Güncelleme
Yorum has_one
hakkında bir sorum var, sadece güncelleme. Burada hile includes()
dernek adına beklediği ama where
tablo ismini bekliyor. has_one
Derneği Genel değişiklikler yani tekil olarak ifade edilmiştir, edilecektir, ama where()
parçası olarak kalır. Person
has_one :contact
sadece bir eğer deyim olur:
Person.includes(:contact).where( :contacts => { :person_id => nil } )
Güncelleme 2
Biri insanlar hakkında ters, arkadaş istedi. Olarak yorumladı aşağıda, bu gerçekten anlamamı sağladı bu son alan (yukarıda: :person_id
) yok aslında olması ile ilgili modelisin dönen, sadece bir alanda birleştirme tablo. Bunlardan herhangi biri olabilir nil
olacaklar. Bu yukarıdaki daha basit bir çözüm neden olur
Person.includes(:contacts).where( :contacts => { :id => nil } )
Ve sonra bu insanlar daha basit hale ile arkadaş geri geçiş, ön tek sınıf değiştirme:
Friend.includes(:contacts).where( :contacts => { :id => nil } )
SQL't yok olan bir tablodaki kayı...
Aktif Kaydı bulmak raylar (:: => ) ...
csv dosyası olarak kayıtları döndürmek...
Dizi boş alan (Firavun faresi kullanar...
Gruplandırılmış SQL sonuçları her grup...