我的网站让用户预订汽车。有很多车可供选择,汽车有不同的max_occupancy
号码。一旦用户选择汽车,注册过程开始,用户必须为每位乘客提交一个名称。
模型
class Booking < ActiveRecord::Base
has_many :cars
accepts_nested_attributes_for :cars
end
class Car < ActiveRecord::Base
belongs_to :bookings
has_many :passengers
accepts_nested_attributes_for :passengers
end
class Passenger < ActiveRecord::Base
belongs_to :cars
accepts_nested_attributes_for :passengers
end
控制器
def new
@booking = Booking.new
@car = @booking.cars.build
@car.passengers.build
end
def signup
@car = Car.find(params[:id])
@max_occupancy = @car.max_occupancy
@booking = Booking.new
end
表格
<%= form_for(@booking) do |f| %>
<%= f.fields_for :cars do |car| %>
<%= car.hidden_field :car_id, value: @car.id %>
<%= car.number_field :quantity, value: 1, class: 'form-control', min: 1 %>
<%= car.fields_for :passengers do |passenger| %>
<%= passenger.label :name %>
<%= passenger.text_field :name %>
<% end %>
<% end %>
<% end %>
功能
当表单首次呈现时,默认数量设置为1
,所以在页面加载时我想要块
<%= passenger.label :name %>
<%= passenger.text_field :name %>
渲染1 * @car.max_occupancy
。如果数量增加或减少,则块应呈现为n * @car.max_occupancy
(其中n是number_field中设置的数量)。任何空白的passenger
字段都应该被忽略
我将如何创建此功能以及如何通过单次提交更改控制器以创建多个passengers
。