Подтвердить что ты не робот

Ruby on Rails неправильно документирует документ об ассоциации Activerecord?

Ничего себе, я боролся с этим целый день, следуя "официальному" рубину на справочнике направляющих, и только что обнаружил, что я мог ошибаться в документе все время. Я просто хочу подтвердить, верно ли это.

Если вы перейдете к http://guides.rubyonrails.org/association_basics.html и до 2.10. сам присоединяется к разделу, в котором говорится:

class Employee < ActiveRecord::Base
  has_many :subordinates, :class_name => "Employee"
  belongs_to :manager, :class_name => "Employee",
    :foreign_key => "manager_id"
end

Теперь, я новичок и просто верю в этот код (Что еще я могу сделать?) и написал код, который является вариацией этого случая с явным присоединением. Однако чем больше я смотрел на него, тем больше он не чувствовал себя хорошо. не :subordinates должен иметь поле :foreign_key вместо :manager? Во всяком случае, я только что изменил его, так что код выглядит примерно так:

class Employee < ActiveRecord::Base
  has_many :subordinates, :class_name => "Employee", :foreign_key => "manager_id"
  belongs_to :manager, :class_name => "Employee"
end

и теперь он работает. Я что-то упускаю? Или официальный документ ошибочен? Трудно поверить, что в официальном документе будет представлена ​​некорректная информация, но, возможно, так, как есть.

4b9b3361

Ответ 1

Правильно, справочный документ неверен на момент написания этой статьи.

belongs_to не нуждается в опции :foreign_key, потому что AR выведет manager_id из имени ассоциации ( "manager" ). Как документировано, AR будет вызывать ошибку, когда, если Employee @dwight пытается выполнить @dwight.subordinates, поскольку AR будет использовать employee_id в условии WHERE оператора SELECT.

В соответствии с документацией AR передача параметра :foreign_key в has_many приводит к объявлению FK, который будет использоваться при генерации запроса для @dwight.subordinates.