Не удается сохранить данные из другой таблицы. Ruby on Rails 5 - PullRequest
0 голосов
/ 25 января 2019

У меня есть таблица рейсов и таблица пассажиров. При создании нового рейса мне нужно иметь возможность добавить несколько пассажиров в этот рейс.

Мне удалось присоединиться к моим таблицам рейсов и пассажиров, и теперь пассажиры отображаются в новой форме полета. Проблема сейчас в том, что я не могу спасти пассажиров.

Форма полета:

<label><%= form.label :passengers %></label>
    <%= collection_select(:passenger, :passenger_id, Passenger.all, :id, :first_name, {}, { :multiple => true } )%>

flight.rb

has_and_belongs_to_many :passengers

passenger.rb

has_and_belongs_to_many :flights

flights_controller.rb

def create
@flight = Flight.new(flight_params)

params[:passenger][:passenger_ids].each do |passenger_id|
  unless passenger_id.empty?
  passenger = Passenger.find(passenger_id)
    @flight.passengers << passenger
  end
end

respond_to do |format|
  if @flight.save
    format.html { redirect_to @flight, notice: 'Flight was successfully created.' }
    format.json { render :show, status: :created, location: @flight }
  else
    format.html { render :new }
    format.json { render json: @flight.errors, status: :unprocessable_entity }
  end
 end
end

schema.rb

create_table "flights", force: :cascade do |t|
 t.string "origin"
 t.string "destination"
 t.string "dep_time"
 t.string "arr_time"
 t.integer "seats"
 t.integer "price"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
 t.integer "airline_id"
 t.index ["airline_id"], name: "index_flights_on_airline_id"
end


create_table "flights_passengers", id: false, force: :cascade do |t|
 t.integer "flight_id", null: false
 t.integer "passenger_id", null: false
 t.index ["flight_id", "passenger_id"], name: "index_flights_passengers_on_flight_id_and_passenger_id"
 t.index ["passenger_id", "flight_id"], name: "index_flights_passengers_on_passenger_id_and_flight_id"
end

create_table "passengers", force: :cascade do |t|
 t.string "first_name"
 t.string "last_name"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
end

1 Ответ

0 голосов
/ 25 января 2019

Перед сохранением необходимо добавить пассажиров в рейс, например:

@flight.passengers << passenger

Вы добавляете его в @boarding, не видите, где вы это заявили?

...