Tôi đã đóng đinh những gì tôi muốn, nhưng tôi dường như không thể làm theo cách mà các nhà thiết kế đường ray đang tìm kiếm. Về cơ bản, tôi có (xin dành pluralization/vấn đề vv):Has_Many: Thông qua hoặc: finder_sql
Nhân Mối quan hệ (phụ huynh, Offspring)
Tôi đang cố gắng để có được tất cả các con cái cho một người mẹ độc thân, và phụ huynh duy nhất cho nhiều offsprings (giả sử chỉ có một phụ huynh cho mỗi con).
tôi có thể làm điều này theo cách sau trong mô hình:
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}'
tôi phải làm điều này, bởi vì con đường đẹp hơn để làm điều đó:
has_many :offsprings, :through => :relationships, :foreign_key => :source_human_id, :source => :human
là không thể vì các phím nước ngoài được bỏ qua trong has_many (theo các tài liệu ở đây: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many)
Tuy nhiên, bây giờ tôi nhận được lỗi này:
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)
Tuy nhiên, bất kể tôi hack như thế nào: điều kiện ở đây, nó không xuất hiện: finder_sql muốn tham gia. Có suy nghĩ gì không?
Nữ và Vi trùng, người chiến thắng. Các tài liệu là sai ở đây, bạn không làm một: điều kiện trên: finder_sql, bạn chỉ cần xây dựng nó trong. – aronchick