tag select_tag rails form_with form_for form fields_for ruby-on-rails-3 forms nested-forms

ruby on rails 3 - select_tag - Rieles: al usar form_for y fields_for, ¿cómo se accede al subobjeto mientras se está en fields_for block?



nested form rails (2)

En mi primera aplicación de rieles, intento usar form_for y fields_for para crear un formulario de objeto anidado. Hasta aquí todo bien, pero no puedo entender cómo acceder al subobjeto mientras fields_for en el campo fields_for block. He rellenado previamente un campo en el subobjeto con los datos que quiero mostrar en las instrucciones del usuario.

Modelos
Garaje:

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

Coche:

belongs_to :garage

Controlador de garaje

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

Como puede ver, dentro del bloque de construcción para: autos, quiero mostrar, en mis instrucciones de usuario, el campo: car.stall_number (poblado en mi controlador con un número entero):

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

He intentado muchas ideas diferentes: @car.stall_number , object.car.stall_number , etc. No hay alegría. Múltiples búsquedas y un vistazo a los fields_for código fuente no han ayudado a mi comprensión. Agradecería cualquier orientación.

Actualización: para aclarar, según la sugerencia de Dan, probé builder.stall_number pero da como resultado un

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


Acabo de lidiar con esto hoy mismo.

Puede acceder al objeto de los campos_por:

builder.object

donde el constructor es tu objeto fields_for form builder. En su caso particular, puede decir:

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

Eso debería hacerlo por ti!


La forma en que está intentando no funciona porque quiere acceder al car sin llenar esa variable para los datos.

Supongo que quiere tener varios bloques de puestos, donde puede ingresar matrículas. Para cada puesto necesitarás tus propios fields_for . Sugeriría algo así:

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

Dentro de los campos_para que necesite usar el objeto de formulario que defina allí, en este caso constructor. Dado que los datos no están mapeados a la forma externa (f), sino al objeto del automóvil (constructor).