Rails - 使用form_for和fields_for,如何在fields_for块中访问子对象?

Don*_*ham 45 forms nested-forms ruby-on-rails-3

在我的第一个rails应用程序中,我正在尝试使用form_forfields_for创建嵌套对象表单.到目前为止一直很好,但我无法弄清楚如何在fields_for块中访问子对象.我已经在子对象中预先填充了一个字段,其中包含我想在用户指令中显示的数据.

车库模型
:

has_many :cars, :dependent => :destroy         
accepts_nested_attributes_for :cars
Run Code Online (Sandbox Code Playgroud)

汽车:

belongs_to :garage
Run Code Online (Sandbox Code Playgroud)

车库控制器

def new
  @garage = Garage.new
  for i in 1..5 
    @garage.cars.build :stall_number => i
  end
end
Run Code Online (Sandbox Code Playgroud)

_form.html.erb

<%= form_for @garage do |f| %>
  <%= f.label :title, "Garage Name" %><br />
  <%= f.text_field :title %>
  <% f.fields_for :cars do |builder| %>
    <p>Enter license for car parked in stall: <%= car.stall_number %></p>
    <%= f.label :license, "License #:" %><br />
    <%= f.text_field :license %>
  <%= end %>
<%= end %>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在构建器块中为:cars,我想在我的用户指令中显示以下字段:( car.stall_number在我的控制器中填充整数):

<p>Enter license for car parked in stall: <%= car.stall_number%></p>
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多不同的想法:@car.stall_number,object.car.stall_number等,没有喜悦.多次搜索和查看fields_for源代码并没有帮助我理解.我很感激任何指导.

更新:为了澄清,根据丹的建议,我已经尝试了builder.stall_number但是它导致了一个

NoMethodError: undefined method 'stall_number' for #<ActionView::Helpers::FormBuilder:0x00000102a1baf0>
Run Code Online (Sandbox Code Playgroud)

Cha*_*zak 81

我今天刚刚处理了这个问题.

您可以通过以下方式访问fields_for的对象:

builder.object
Run Code Online (Sandbox Code Playgroud)

其中builder是您的fields_for表单构建器对象.在您的特定情况下,您可以说:

<p>Enter license for car parked in stall: <%= builder.object.stall_number%></p>
Run Code Online (Sandbox Code Playgroud)

那应该为你做!