我正在尝试在预订/新视图中使用嵌套表单创建对象。我有一个航班模型,一个预订模型和一个乘客模型。
飞行模型has_many :passengers
和has_many :bookings
预订模型belongs_to :flight
和has_many :passengers
旅客模型``属于:预订and
属于:航班`
这是我的视图bookings / new.html.erb:
<h1>Create new booking</h1>
For flight <%= @flight.id %>: <%= @flight.departure_airport.code %> - <%= @flight.arrival_airport.code %>
on: <%= @flight.departure_date %><br><br>
<%= form_with model: @booking, local: true do |f| %>
<%= f.hidden_field :flight_id, value: @flight.id %>
<%= f.fields_for :passengers do |passenger| %>
<%= passenger.hidden_field :flight_id, value: @flight.id %>
<%= passenger.label :name %><br>
<%= passenger.text_field :name %><br>
<%= passenger.label :email %><br>
<%= passenger.email_field :email %><br><br>
<% end %>
<%= f.submit %>
<% end %>
这是我的预订主管:
class BookingsController < ApplicationController
def new
@flight = Flight.find(params[:flight_id])
@num_of_pass = params[:num_of_pass].to_i
@booking = Booking.new
@num_of_pass.times do
@booking.passengers.build
end
end
def create
@flight = Flight.find(params[:booking][:flight_id])
@booking = @flight.bookings.build(booking_params)
if @booking.save
puts "SAVED"
else
puts @booking.errors.full_messages
puts "NOT SAVED"
end
end
def show
@booking = Booking.find(params[:id])
end
private
def booking_params
params.require(:booking).permit(:flight_id, passengers_attributes:[:name, :email, :flight_id])
end
end
我得到的错误是“预订的乘客不能为空” 如果我建立预订,然后保存它,然后建立乘客,则可以正常工作,但是我试图使用嵌套的强大参数。
问题似乎是在创建乘客之前没有保存预订模型。
我一直在反对这个问题,好几个小时了,希望有人能给我一些见识
谢谢
答案 0 :(得分:0)
我的问题是我的乘客模型得到了验证。因为我有validates :booking_id, presence: true
有人知道如何保留验证,但也允许其构建吗?