Как отправить несколько моделей в одну форму для ассоциации has_many / assign_to? - PullRequest
0 голосов
/ 28 июня 2018

В моем приложении модель Vehicle может иметь несколько моделей Driver, а модель Base также может иметь несколько моделей Driver. Сейчас ассоциации настроены так:

vehicle.rb

class Vehicle < ApplicationRecord
has_many :drivers

base.rb:

class Base < ApplicationRecord
has_many :drivers

driver.rb:

class Driver < ApplicationRecord
belongs_to :vehicle
belongs_to :base

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

Где я спотыкаюсь, реализует Base ассоциацию моделей. База может присоединиться к нескольким водителям в любой момент времени, но водитель может присоединиться только к одной базе за раз.

Что бы я предпочел, чтобы мое приложение могло делать:
При добавлении нового Driver я бы хотел, чтобы пользователь мог также добавить базовую информацию о драйвере. В связи с тем, как работают базы, база может существовать в таблице баз еще до добавления драйвера. Если база существует, драйвер просто добавляется в таблицу драйверов со ссылкой на ранее существовавшую базу в таблице баз. Если база еще не существует, т. Е. Это первый раз, когда эта конкретная база связана с каким-либо драйвером, добавьте базу в таблицу баз и добавьте драйвер в таблицу драйверов со ссылкой на правильную базу в таблица оснований.

В drivers_controller.rb я передаю новый Base экземпляр:

def new
    @vehicle = Vehicle.find(vehicle_id)
    @base = Base.new
    @driver = Driver.new
end

def create
    render plain: params[:base].inspect
    # other misc code
end

После проверки параметра :base я вижу, что возвращается nil, что имеет смысл, поскольку я ничего не делаю с переменной экземпляра @base в представлении new.html.erb для DriverController. У меня уже есть частичная форма для BaseController и DriverController. Есть ли способ для меня отрисовать обе частичные формы и отправить одну форму для нескольких моделей? Это плохая идея? Как я могу достичь своего конечного результата?

Для справки, мой new.html.erb для DriverController:

# add a @base reference in the following line?
<%= form_with model: @driver, url: vehicle_drivers_path(@vehicle), local: true do |form| %>
    # render the base partial here?
    <%= render 'form', form: form %>
<% end %>

1 Ответ

0 голосов
/ 28 июня 2018

В этом случае вы можете использовать вложенные атрибуты. См. Вложенные атрибуты активной записи здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...