recursos rails formularios anidados ruby-on-rails-3 activerecord webforms link-to

ruby-on-rails-3 - anidados - formularios en ruby on rails



Construyendo un atributo anidado de mĂșltiples objetos padre (2)

No.

Puedes intentar esto

link_to "New ...", polymorphic_url([:new, @order, :order_item], :photo_id => photo.id)

o link_to vieja link_to

link_to "New ...", new_order_order_item(@order, :photo_id => photo.id)

Actualmente estoy intentando usar link_to con un método de ayuda que crea enlaces para crear elementos dinámicamente, en lugar de utilizar los métodos new_object_path . Rails 3 permite URL polimórficas, que fl00r me ayudó a identificar y usar en la forma que estaba buscando originalmente. Sin embargo, si se usa el método polymorphic_url Rails como se muestra aquí, se pasa el argumento en la solicitud http, el campo de formulario relacionado en la página devuelta no se rellena y no se establece. Estoy intentando crear un order_item partir de un order que también se order_item partir de una photo .

¿Alguien ve lo que está mal aquí? El código relacionado está a continuación:

# the helper method def add_cart_button_for(arr, attr_hash={}) link_to button(:cart_add), polymorphic_url( [:new] + arr, attr_hash ) end # the call in index.html.haml = add_cart_button_for [current_order, :order_item], :photo_id => photo.id # _form.html.haml for order_item - form_for [ @order, @order_item ] do |f| %p = f.label :photo_id %br = f.text_field :photo_id

Aquí está la pregunta original:

Estoy intentando crear un enlace para crear un [:new, @order, @order_item] donde @order_item.photo_id se puede pasar en el enlace.

Ahora, no estoy seguro si eso tiene mucho sentido, así que trataré de aclarar mi problema aquí.

Por lo que he visto, Rails 3 tiene una sintaxis newish para vincular acciones de recursos usando una matriz estructurada como [:action, object] o para recursos profundamente anidados, [:action, parent, child] . Para este ejemplo en particular, estoy usando link_to [:new, @order, :order_item] . Estos botones se adjuntarán a cada foto en una galería de fotos.

¿Es posible pasar el id de la foto como el atributo photo_id del nuevo artículo de pedido?

Hasta ahora he intentado link_to [:new, @order, :order_item], :photo_id => photo.id , pero parece que no funciona. También intenté poner :photo_id en un hash explícito. ¿Hay alguna manera de seguir esta nueva sintaxis y lograr esta funcionalidad?

Actualización: realmente espero encontrar algo como:

link_to "new photo", [:new, @order, :order_item => {:photo_id => photo.id}]

donde estoy haciendo algo parecido a: construir pero con más que solo los atributos del modelo de generador que se está suministrando.

ACTUALIZACIÓN 11 de abril 2011 Lo tengo trabajando donde puedo pasar un atributo en una solicitud de obtención utilizando polymorphic_url como se ve a continuación:

# the helper method def add_cart_button_for(arr, attr_hash={}) link_to button(:cart_add), polymorphic_url( [:new] + arr, attr_hash ) end # the call in index.html.haml = add_cart_button_for [current_order, :order_item], :photo_id => photo.id

Parece que debería estar funcionando. Puedo ver la solicitud de obtención que parece funcionar como se esperaba:

Started GET "/orders/1/order_items/new?photo_id=130" for 127.0.0.1 at 2011-04-11 18:11:07 -0400 Processing by OrderItemsController#new as HTML Parameters: {"photo_id"=>"130", "order_id"=>"1"}

y la url es la esperada, pero la forma no parece captar esa variable de la url.

El: order_id funciona. El: photo_id, sin embargo, no parece llevar a la nueva página OrderItems #. text_field un text_field para :photo_id , y está vacío cada vez. Está en el attr_accessible . No veo por qué no está funcionando.


Finalmente me di cuenta de esto.

En mi nueva acción OrderItemsController #, mi función de build no tomaba parámetros o params[:order_item] como parámetro. Como el parámetro pasado desde polymorphic_url no estaba realmente relacionado con ningún objeto, sino que era solo un atributo en bruto, intenté simplemente pasar todo el hash de params a la función de compilación. Trabajado como un encanto. Entonces estoy usando este código para el enlace:

= add_cart_button_for [current_order, :order_item], :photo_id => photo.id

y este código en mi controlador:

def new @order_item = @order.order_items.build(params) end def create @order_item = @order.order_items.build(params[:order_item]) if @order_item.save @order.save flash[:notice] = "Successfully created order item." redirect_to @order else render :action => ''new'' end end

Ahora que se está aprobando todo el hash de params, el formulario puede encontrar la foto correcta al crear el nuevo artículo de pedido.