Rails的 – 使用form_for和fields_for,你如何访问子对象,而在fields_for块?
在我的第一个rails应用程序中,我试图使用form_for
和fields_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_number
, object.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器)。