Нет, эти операторы немного отличаются тем, как они будут давать вам методы в классе, который вы их используете. Предположим, вы определяете эти операторы внутри класса Office, поэтому первый оператор, т. Е.
class Office < ActiveRecord::Base
belongs_to :keeper, :class_name => "Staff"
end
создает отношения между персоналом и классом Office, но связь между Office и персоналом называется keeper и будет использовать keeper_id в качестве внешнего ключа в классе Office для установления отношений. Поэтому, если у вас есть экземпляр объекта Office в переменной office, вы можете получить Staff для этого объекта office, используя
office.keeper
В другом сценарии
class Office < ActiveRecord::Base
belongs_to :staff, :foreign_key => "keeper_id"
end
вы создаете связь между персоналом и классом Office, а связь между Office и персоналом называется персоналом и будет использовать keeper_id в качестве внешнего ключа в классе Office для установления связи, как вы указали внешний ключ.
Так что в этом случае, если вы хотите попасть в Staff, тогда вы будете делать
office.staff
В итоге, если вы просто сделаете
belongs_to :staff
в вашей модели, тогда в соответствии с соглашением о рельсах вы получите метод персонала в вашей модели, который будет использовать staff_id в качестве внешнего ключа для установления связи между моделью Staff и этой моделью. Но rails также дает вам возможность переопределить эти соглашения в исключительных случаях, например, унаследованное приложение. Итак, в основном вы переопределяете соглашение rails в двух приведенных выше инструкциях, используя внешний ключ и имя класса.