Я прибил то, что хочу, но не могу понять это так, как ищут дизайнеры рельсов. В принципе, у меня есть (пожалуйста, отложите плюрализацию и т. выпусков):
Человек Взаимоотношения (родитель, потомство)
Я пытаюсь получить всех потомков для одного родителя и единственного родителя для многих потомков (предположим, что только один родитель на потомство).
Я могу сделать это следующим образом в модели:
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}'
Мне пришлось сделать это, потому что это сделать лучше:
has_many :offsprings, :through => :relationships, :foreign_key => :source_human_id, :source => :human
Невозможно, потому что внешние ключи игнорируются в has_many (согласно документации здесь: http: // api. rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many)
Однако теперь я получаю эту ошибку:
ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕВАНИИ: на основе строк интерполяция ассоциации условия устарели. Пожалуйста, используйте proc вместо этого. Так, например, has_many: old_friends,: условия => 'age> # {age}' следует заменить на has_many: old_friends,: conditions => proc {"age> # {age}"}. (вызывается из irb_binding по адресу (irb): 1)
Однако, как бы я ни взламывал: условия здесь, не похоже, что: finder_sql хочет участвовать. Какие-нибудь мысли?