Я хотел бы знать, как получить поле обратной связи, учитывая поле в модели. Например, если модель User
имеет внешний ключ (т. Е. belongs_to
) для модели Role
, а модель Role
имеет соответствующую ассоциацию has_many
с моделью User
, тогда AFAIK, настройка User.role
- это то же самое, что добавить пользователя в Role.users
. Я пытаюсь понять, как программно обнаружить, что Role.users
- это обратное соотношение User.role
.
Я знаю, как получить ассоциации ActiveRecord, используя отражения модели. В моем примере User.reflections['role']
даст ассоциацию belongs_to
, а Role.reflections['users']
даст отражение has_many
на "другой стороне". Я хочу знать, как программно выяснить, что Role.users
является обратной ассоциацией User.role
, и наоборот. В Django это обычно делается путем проверки свойства related_name
.
Прямо сейчас я проверяю отражения и определяю, находится ли отражение на другой стороне, используя свойство foreign_key
объектов отражения. , Например, и User.reflections['role'].foreign_key
, и Role.reflections['users'].foreign_key
вернут role_id
.
Однако это не работает для некоторых ассоциаций, например, для многих-многих или :through
. Некоторые другие методы, которые я пробовал, не работают, если модель имеет несколько ассоциаций с одной и той же моделью.
Как определить, какое отражение / поле в другой модели соответствует данному полю в конкретной модели