Как сохранить Join Table с Ruby на Rails - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать простое приложение, которое позволяет пользователю сохранить драйвер, сохранить автомобиль и объединить их (с помощью таблицы соединений).

Модель драйвера:

has_many :cars_drivers
has_many :cars, through: :cars_drivers

Модель автомобиля:

has_many :cars_drivers
has_many :drivers, through: :cars_drivers

cars_driver модель:

belongs_to :car, optional: true
belongs_to :driver, optional: true

Я хотел показать все автомобили, на которых был водитель, поэтому я добавил это на drivers_controller:

def create
  @driver = Driver.new(driver_params)
  respond_to do |format|
    if @driver.save
      CarsDriver.where(driver_id: @driver.id).destroy_all
        form_cars_selected.each do |car_id|
          CarsDriver.create driver_id: @driver.id, car_id: car_id
        end
      format.html { redirect_to @driver, notice: 'Driver was successfully created.' }
      format.json { render :show, status: :created, location: @driver }
    else
      format.html { render :new }
      format.json { render json: @driver.errors, status: :unprocessable_entity }
    end
  end
end

и это на виду:

<% if @driver.cars.blank? %>
  Driver has no cars.
<% else %>
  <%= @driver.cars.pluck(:description).to_sentence %>
<% end %> 

Но это не работает. Что я мог пропустить? Есть ли более простой способ установить это базовое c отношение в RoR?

1 Ответ

1 голос
/ 12 марта 2020

в new/edit Driver форме вы можете добавить множественный выбор

<%= form.select :car_ids, Car.order(:name).map { |c| [c.name, c.id] }, {}, multiple: true %>

в контроллере и разрешить car_ids: [] до patient_params

Это способ добавления автомобилей в форму «Водитель из драйвера»


_ids= - это специальный метод , позволяющий создавать модели соединений

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