所以我正在完成ODIN项目的“航班预订”项目。
https://www.theodinproject.com/courses/ruby-on-rails/lessons/building-advanced-forms
. 这基本上就是它听起来的样子,我遇到了传递嵌套属性的问题。
首先是相关模型:
class Booking < ApplicationRecord
belongs_to :passenger
belongs_to :flight
accepts_nested_attributes_for :passenger
end
class Flight < ApplicationRecord
has_many :bookings, dependent: :destroy
has_many :passengers, through: :bookings
belongs_to :to_airport, class_name: 'Airport', foreign_key: 'origin_id'
belongs_to :from_airport, class_name: 'Airport', foreign_key: 'destination_id'
end
class Passenger < ApplicationRecord
has_many :bookings, dependent: :destroy
has_many :flights, through: :bookings
end
乘客模式仅包含当前的电子邮件和名称。但问题是当我将信息传递给“预订”控制器时。这是我的“新”预订表。
<%= form_for @booking do |f| %>
<%= f.hidden_field :flight_id, value: params[:booking][:flight_num] %>
<%= f.hidden_field :passengers_num, value: params[:booking][:passengers_num] %>
<% params[:booking][:passengers_num].to_i.times do |passenger| %>
<%= fields_for :passenger do |passenger| %>
<%= passenger.label :name, 'Name', class: "Label" %>
<%= passenger.text_field :name %>
<%= passenger.label :email, 'email', class: "Label" %>
<%= passenger.email_field :email %>
<% end %>
<% end %>
<%= f.submit "Book Flight" %>
<% end %>
(暂时忽略隐藏字段,它们从“航班”搜索页面传递,我会很好地得到它们。)
所以我得到了多个表单(名称和电子邮件字段),但是当我“提交”时,我只得到最后一个字段集的参数。(因此,如果有3组名称/电子邮件字段,我只获取最后一个字段的参数)。
可能我不理解
fields_for
但是我找不到很多好的例子。
谢谢!