Rails嵌套表单是一种在Rails框架中用于处理表单数据的技术。它允许我们在一个表单中同时提交多个相关联的对象数据,其中一个对象作为主对象,其他对象作为嵌套对象。
在这个问答内容中,我们需要向预订中添加一个Passenger对象。为了实现这个功能,我们可以使用Rails的嵌套表单功能。
首先,我们需要在预订表单中添加一个嵌套的Passenger表单。可以通过使用fields_for
方法来实现。在预订表单中的代码如下:
<%= form_for @booking do |f| %>
<%= f.label :booking_number %>
<%= f.text_field :booking_number %>
<%= f.fields_for :passenger do |passenger_fields| %>
<%= passenger_fields.label :name %>
<%= passenger_fields.text_field :name %>
<%= passenger_fields.label :age %>
<%= passenger_fields.number_field :age %>
<% end %>
<%= f.submit "Create Booking" %>
<% end %>
在上面的代码中,我们使用fields_for
方法来创建一个嵌套的Passenger表单。通过passenger_fields
变量,我们可以访问Passenger对象的属性,并在表单中显示相应的输入字段。
接下来,我们需要在预订控制器中更新相应的代码,以便能够接受Passenger对象的参数并将其保存到数据库中。在预订控制器中的代码如下:
class BookingsController < ApplicationController
def new
@booking = Booking.new
@booking.build_passenger
end
def create
@booking = Booking.new(booking_params)
if @booking.save
redirect_to @booking
else
render 'new'
end
end
private
def booking_params
params.require(:booking).permit(:booking_number, passenger_attributes: [:name, :age])
end
end
在上面的代码中,我们使用build_passenger
方法来创建一个新的Passenger对象,并将其与预订对象关联起来。在booking_params
方法中,我们使用passenger_attributes
来允许Passenger对象的参数被接受。
最后,我们需要在预订模型中添加相应的关联关系。在预订模型中的代码如下:
class Booking < ApplicationRecord
has_one :passenger
accepts_nested_attributes_for :passenger
end
在上面的代码中,我们使用has_one
方法来定义预订和Passenger之间的关联关系。通过accepts_nested_attributes_for
方法,我们可以接受Passenger对象的参数。
这样,当我们提交预订表单时,预订对象和嵌套的Passenger对象将被同时创建和保存到数据库中。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。您可以通过以下链接了解更多信息:
领取专属 10元无门槛券
手把手带您无忧上云