Rails的 – 使用form_for和fields_for,你如何访问子对象,而在fields_for块?

在我的第一个rails应用程序中,我试图使用form_forfields_for来创build一个嵌套的对象窗体。 到目前为止这么好,但我无法弄清楚如何在fields_for块中访问子对象。 我已经预先在子对象中填充了一个字段,其中要显示用户指令中的数据。

楷模
车库:

 has_many :cars, :dependent => :destroy accepts_nested_attributes_for :cars 

汽车:

 belongs_to :garage 

车库控制器

 def new @garage = Garage.new for i in 1..5 @garage.cars.build :stall_number => i end end 

_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 %> 

正如你所看到的,在汽车的build设者块里面,我想在我的用户指令中显示car.stall_number字段(在我的控制器中填充一个整数):

 <p>Enter license for car parked in stall: <%= car.stall_number%></p> 

我已经尝试了许多不同的想法: @car.stall_numberobject.car.stall_number等没有喜悦。 多次search,并看看fields_for源代码没有帮助我的理解。 我将不胜感激任何指导。

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

 NoMethodError: undefined method 'stall_number' for #<ActionView::Helpers::FormBuilder:0x00000102a1baf0> 

我自己今天就处理了这个。

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

 builder.object 

其中构build器是您的fields_for表单构build器对象。 在你的具体情况下,你可以说:

 <p>Enter license for car parked in stall: <%= builder.object.stall_number%></p> 

这应该为你做!

您尝试的方式是行不通的,因为您要访问car而不填充该数据的variables。

我想你想要有多个摊位,你可以在那里input车牌。 对于每个摊位,您将需要您自己的fields_for 。 我会build议这样的事情:

 <%= form_for @garage do |f| %> <%= f.label :title, "Garage Name" %><br /> <%= f.text_field :title %> <% for i in 1..5 %> <% f.fields_for @garage.cars[i] do |builder| %> <p>Enter license for car parked in stall: <%= builder.stall_number%></p> <%= builder.label :license, "License #:" %><br /> <%= builder.text_field :license %> <% end %> <% end %> <% end %> 

在fields_for你需要使用你定义的表单对象,在这个例子中是builder。 由于数据没有映射到外部窗体(f),而是映射到汽车对象(构build器)。