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

Получать поле внешнего ключа из ассоциаций в Rails

Я хочу знать имя поля, соответствующее заголовку таблицы для данной модели в Rails.

Я показываю титры с использованием модели запроса.

query.columns.map {| д | q.caption}
  = > [ "Tracker", "Status", "Priority", "Subject", "Assignee", "Target version", "Due date", "% Done" ]

У столбца есть имена, соответствующие титрам

query.columns.map {| д | q.name}
  = > [: tracker,: status,: priority,: subject,: assign_to,: fixed_version,: due_date,: done_ratio]

Моя модель выглядит как

Issue.columns.map {| д | q.name}
  = > [ "id", "tracker_id", "project_id", "subject", "description", "due_date", "category_id", "status_id", "assign_to_id", "priority_id", "fixed_version_id", "author_id", "created_on", "updated_on", "start_date", "done_ratio", "rated_hours", "parent_id" ]

Я хочу получить имя поля (имя поля db), соответствующее заголовку из приведенной выше информации.

Пример ассоциации в модели

belongs_to :assigned_to, :class_name => 'Principal', :foreign_key => 'assigned_to_id'

Итак, для этой связи я хочу знать внешний ключ.

для assigned_to Я хочу 'assigned_to_id'

4b9b3361

Ответ 1

Хэш reflections содержит такую ​​информацию:

Issue.reflections['assigned_to'].foreign_key

Вы также можете получить другую информацию, такую ​​как класс (.active_record) или тип ассоциации (.macro). До рельсов 4.2 ключи этого хеша являются символами, а не строками.

Ответ 2

Правильный способ для Rails 4.2:

Issue.reflections['assigned_to'].options[:foreign_key]

Обратите внимание, что "assign_to" представляет собой строку в соответствии с API:

Возвращает хеш имени отражения в качестве ключа и AssociationReflection как значение.

http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html#method-i-reflections