Я сейчас создаю свое первое приложение с Ruby на Rails (версия 5.2.4.2 с ruby 2.6.3) и у меня проблема с одной из ассоциаций. В моей модели есть приложения, в которых вы предоставляете одну компанию, к которой вы обращаетесь. Логически я хотел бы иметь возможность получить приложение и сказать: application.company = Company.find_by(...)
.
. Чтобы сделать эту работу, у меня есть
# app/models/Application.rb
class Application < ApplicationRecord
has_one: company
end
# app/models/Company.rb
class Company < ApplicationRecord
end
# database migration
Class AddCompanyToApplication
def change
add_reference :companies, :application, foreign_key: true
end
end
. Это позволяет мне использовать нужный синтаксис, но имеет одна проблема. Когда я создаю второе приложение для той же компании, изменяется строка в таблице компаний, которая удаляет компанию из первого приложения.
Список компаний задан заранее, и я просто хочу обратиться к компании из приложения. Есть ли способ использовать синтаксис присваивания при размещении внешнего ключа в приложении, а не в компании? С точки зрения базы данных я чувствую, что приложение должно содержать внешний ключ, но это нарушает синтаксис присваивания. Похоже, что Ruby хочет, чтобы у меня в компании были has_many: приложения, но это нарушает семантику того, что я пытаюсь выполнить sh. Есть ли способ изменить размещение внешнего ключа или мне нужно для go синтаксиса присваивания и придерживаться SQL и присвоения непосредственно идентификаторам?