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ı...
Nasıl Raylar Aktif Kayıt için varsayıl...
Dizi boÅŸ alan (Firavun faresi kullanar...
Olan asal sayıları bulmak için en hızl...
MySQL bir sütunda aynı değere sahip ol...