嵌套轨道表单字段未呈现



我已经阅读了许多关于此的帖子,但我仍然感到困惑。我对Rails比较陌生。我在轨道上 3.2.8 和 Ruby 1.9.3。

我有一个表单,我想在其中为 2 个不同的表创建记录。这是一种多对多关系(航海日志可以有多个飞机,飞机将出现在多个航海日志中)。

这是我的代码:

# ----- Models ----- #
class Logbook < ActiveRecord::Base
  has_and_belongs_to_many :aircrafts
  accepts_nested_attributes_for :aircrafts
end
class Aircraft < ActiveRecord::Base
  belongs_to :logbook
end
# ----- Logbooks Controller ----- #
def my_method
  @logbook = Logbook.new 
  @aircraft = Aircraft.new
end
# ----- View ----- #
<%= form_for @logbook, validate: true, remote: true do |f| %>
  <%= f.label :flight_date, "Flight Date" %>
  <%= f.text_field :flight_date %>  
  ...
  <%= f.fields_for :aircrafts, validate: true, remote: true do |a| %>
    <%= a.label :aircraft_id, "Aircraft ID" %>
    <%= a.text_field :aircraft_id %>
    ...
  <% end %>
<% end %>
日志字段呈现

良好,但飞机字段无法呈现

有什么想法吗?

尝试将控制器更改为:

def my_method
  @logbook = Logbook.new 
  @aircraft = @logbook.aircrafts.build
end

因为@aircraft需要belongs_to日志,所以nested_form会知道如何构建表单。

注意:如果您不使用变量@aircraft则不需要声明它,只需在控制器上使用@logbook.aircrafts.build

如果我

没记错的话,fields_for将根据父级存在的许多对象的数量生成。由于您的@logbook没有任何飞机,因此不会显示任何字段。尝试更改操作:

def my_method
  @logbook = Logbook.new
  @logbook.aircrafts << Aircraft.new
end

现在,如果您需要在 UI 中制作一些内容来添加多个日志,则需要创建一个添加按钮。您可以基于此增加您建立的飞机记录的数量:

<%= form_tag new_logbook_path, :method => :get do %>
  <%= hidden_field_tag "amount", @amount %>
  <%= submit_tag "Add" %>
<% end %>

然后操作将是:

def my_method
  @amount = params[:amount] || 1
  @logbook = Logbook.new
  @amount.times { @logbook.aircrafts << Aircraft.new }
end

最新更新