İstediğimi aşağı çektim, ancak rayların tasarımcılarının aradığı bir şekilde göremiyorum. Temelde, sahip (bir kenara lütfen çoğulculuk/vb konular):Has_Many: Through or: finder_sql
İnsan İlişkiler (Veli, Offspring)
Ben, tek ebeveyn için tüm Yavrularda almaya çalışıyorum ve birçok tek ebeveynli offsprings (her bir yavru için yalnızca bir ebeveyn üstlenin).
Ben modelde şu şekilde yapabilirsiniz:
has_one :parent, :through => :relationships, :foreign_key => :human_id, :source => :source_human
has_many :offsprings, :finder_sql =>
'SELECT DISTINCT offsprings.* ' +
'FROM humans offsprings INNER JOIN relationships r on ' +
'r.human_id = offsprings.id where r.source_human_id = #{id}'
güzel şekilde yapmak, çünkü bunu yapmak zorunda:
has_many :offsprings, :through => :relationships, :foreign_key => :source_human_id, :source => :human
mümkün değil mi yabancı anahtarları çünkü (burada docs göre: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many) has_many göz ardı edilir
Ancak, şimdi bu hatayı alıyorum:
DEPRECATION WARNING: String-based interpolation of association conditions is deprecated. Please use a proc instead. So, for example, has_many :older_friends, :conditions => 'age > #{age}' should be changed to has_many :older_friends, :conditions => proc { "age > #{age}" }. (called from irb_binding at (irb):1)
Ancak, nasıl hack yapıyorum olursa olsun: burada koşullar, görünmüyor: finder_sql katılmak istiyor. Düşüncesi olan var mı? Ben bunu anlamak dernek kolaylaştırır düşünüyorum
has_many :offsprings, :finder_sql => proc {OFFSPRING_SQL % {id: id}}
OFFSPRING_SQL = "SELECT DISTINCT offsprings.*
FROM humans offsprings
INNER JOIN relationships r
ON r.human_id = offsprings_id
WHERE r.source_human_id = %{id}"
ve çıplak SQL kolaylaştırmak: Eğer
has_many :offsprings, :finder_sql =>
proc { "SELECT DISTINCT offsprings.* " +
"FROM humans offsprings INNER JOIN relationships r on " +
"r.human_id = offsprings.id where r.source_human_id = #{id}" }
Bayanlar ve Germler, kazanan. Dokümanlar burada yanlış, sen yapmıyorsun: koşullar: finder_sql, sadece onu inşa et. – aronchick