Has_Many: Through or: finder_sql

Я прибил то, что хочу, но не могу понять это так, как ищут дизайнеры рельсов. В принципе, у меня есть (пожалуйста, отложите плюрализацию и т. выпусков):

Человек Взаимоотношения (родитель, потомство)

Я пытаюсь получить всех потомков для одного родителя и единственного родителя для многих потомков (предположим, что только один родитель на потомство).

Я могу сделать это следующим образом в модели:

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 хочет участвовать. Какие-нибудь мысли?

9
задан aronchick 28 March 2011 в 22:13
поделиться