#ruby-on-rails #relational-database #relationship #polymorphic-associations
#ruby-on-rails #реляционная база данных #отношения #полиморфные ассоциации
Вопрос:
моя проблема заключается в создании записи партнера внутри компании с полиморфной миграцией. Партнер происходит из моей коллекции пользователей.
Это моя форма
<%= form_with(model: [@company, @partner], remote: true) do |f| %>
<div class="form-group">
<%= f.label 'Selecciona un socio' %>
<%= f.collection_select(:partnershipable_id, User.all, :id, :name, {:prompt => 'Selecciona'}, {class: 'form-control'}) %>
</div>
<% end %>
мои модели
приложение / модели / партнер
class Partner < ApplicationRecord
belongs_to :company
belongs_to :partnershipable, polymorphic: true
end
приложение / модели / пользователь
class User < ApplicationRecord
has_many :partners, as: :partnershipable
end
приложение / модели / компания
class Company < ApplicationRecord
has_many :partners, as: :partnershipable
end
как должна выглядеть форма, чтобы правильно сохранить пользователя в качестве партнера.
Комментарии:
1. Не могли бы вы предоставить дополнительную информацию, например, об ошибке или ожидаемом поведении, на небольшом примере @Esteban Navarro
Ответ №1:
Если вы хотите выбрать полиморфную ассоциацию, вам также необходимо указать тип.
<%= form_with(model: [@company, @partner], remote: true) do |f| %>
<div class="form-group">
<%= f.label 'Selecciona un socio' %>
<%= f.collection_select(:partnershipable_id, User.all, :id, :name, {:prompt => 'Selecciona'}, {class: 'form-control'}) %>
<%= f.hidden_input(:partnershipable_type, 'User') %>
</div>
<% end %>
Поскольку тип, по-видимому, является фиксированным, вы, вероятно, также можете установить значение в контроллере на получающем конце.
Комментарии:
1. Я только что понял, что в дополнение к User я должен иметь возможность добавить еще один тип «Company» Как мне это сделать, чтобы я мог взять тот или иной?
2. Создайте частичную и передайте локальную переменную (или две) вместо переменных экземпляра.