Crear un atributo anidado a partir de varios objetos principales
Actualmente estoy tratando de usarlink_to
con un método auxiliar que crea enlaces para crear elementos dinámicamente, en lugar de utilizar elnew_object_path
métodos. Rails 3 permite URL polimórficas, que fl00r me ayudó a identificar y usar en la forma que estaba buscando originalmente. Sin embargo, mientras usa Rails 'polymorphic_url
l método @ como se muestra aquí pasa el argumento en la solicitud http, el campo de formulario relacionado en la página devuelta no se completa y no se está configurando. Estoy tratando de construir unaorder_item
desde unorder
que también se construye a partir de unaphoto
.
¿Alguien ve lo que está pasando aquí? El código relacionado está debajo:
# 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 tratando de crear un enlace para crear una[:new, @order, @order_item]
dónde@order_item.photo_id
se puede pasar en el enlace.
Ahora, no estoy seguro de si eso tiene mucho sentido, así que intentaré aclarar mi problema aquí.
De lo que he visto, Rails 3 tiene una sintaxis nueva para vincular a acciones de recursos utilizando una matriz estructurada como[:action, object]
o para recursos profundamente anidados,[:action, parent, child]
. Para este ejemplo en particular, estoy usandolink_to [:new, @order, :order_item]
. Estos botones se adjuntarán a cada foto en una galería de fotos.
¿Es posible pasar laid
de la foto como el atributophoto_id
del nuevo artículo de pedido?
Hasta ahora he intentadolink_to [:new, @order, :order_item], :photo_id => photo.id
, pero eso no parece funcionar. También he intentado poner:photo_id
en un hash explícito. ¿Hay alguna manera de seguir esta nueva sintaxis y lograr esta funcionalidad?
Update: Realmente espero encontrar algo similar a:
link_to "new photo", [:new, @order, :order_item => {:photo_id => photo.id}]
donde estoy haciendo un tipo de: compilación pero con algo más que los atributos del modelo de generador que se suministra.
ACTUALIZA 11 abr 2011 Lo hice funcionar donde puedo pasar un atributo a una solicitud de obtención usandopolymorphic_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
Esto parece que debería estar funcionando. Puedo ver la solicitud de obtención que parece estar funcionando 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 el formulario no parece captar esa variable de la url.
The: order_id funciona. El: photo_id, sin embargo, no parece estar transfiriéndose a la nueva página OrderItems #. Creé unatext_field
para:photo_id
, y está vacío cada vez. Está en elattr_accessible
. No veo por qué no funciona.