Экто-ассоциация «один ко многим» в настраиваемых полях

В настоящее время у меня есть модель «Ранг», которая содержит поле (целое число) «ранг», которое является целым числом. С другой стороны, модель «Корабль» имеет поле «usable_by» (целое число). Чего я хочу добиться, так это того, что когда я возвращаю ранг, они также содержат список всех моделей кораблей, где поле «usable_by» соответствует полю «ранг» в модели ранга. Я знаю, что это выполнимо с помощью запроса и заполнения данных вручную, я думаю, но есть ли что-нибудь встроенное в Ecto/Phoenix, которое я могу использовать, чтобы упростить это?

Я предполагаю, что идеальная ситуация, на которую я надеюсь, - это использование has_many (меня не волнует обратная ассоциация) с чем-то вроде :references или foregin_key, но я не могу заставить его работать. Это строка, которую я сейчас использую:

Ранговая модель

schema "ranks" do
  field :name, :string
  field :rank, :integer
  timestamps

  has_many :ships, Playground.Ship #Can I use :foregin_key and :references here?
end

person Wobbley    schedule 09.04.2016    source источник


Ответы (1)


Я думаю, вы уже нашли свой ответ, но если кто-то еще наткнется на этот пост, ответ таков:

has_many :ships, Playground.Ship, foreign_key: :usable_by

Таким образом, вы можете использовать имя настраиваемого поля в связанной модели.

Вы должны использовать ссылки в своей миграции (где вы фактически обновите базу данных). Здесь Playground.Ship действует как ссылка на определенную модель, :created_by — это имя, которое будет использоваться в ассоциации отношений.

person Thaume    schedule 20.03.2017