Criando um atributo aninhado a partir de vários objetos pai
Atualmente, estou tentando usarlink_to
com um método auxiliar que cria links para criar itens dinamicamente, em vez de usar onew_object_path
métodos. O Rails 3 permite URLs polimórficos, que o fl00r me ajudou a identificar e usar no formulário que eu estava procurando originalmente. No entanto, ao usar o Rails 'polymorphic_url
método @, como mostrado aqui, passa o argumento na solicitação http, o campo de formulário relacionado na página retornada não é preenchido e não está sendo definido. Estou tentando construir umorder_item
de umorder
que também é construído a partir de umphoto
.
Alguém vê o que está acontecendo de errado aqui? O código relacionado está abaixo:
# 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
Aqui está a pergunta original: Estou tentando criar um link para criar um[:new, @order, @order_item]
Onde@order_item.photo_id
pode ser passado no link.
Agora, não tenho certeza se isso faz muito sentido, então tentarei esclarecer meu problema aqu
Pelo que vi, o Rails 3 tem uma sintaxe recente para vincular a ações de recursos usando uma matriz estruturada como[:action, object]
ou para recursos profundamente aninhados,[:action, parent, child]
. Neste exemplo em particular, estou usandolink_to [:new, @order, :order_item]
. Esses botões serão anexados a cada foto em uma galeria de fotos.
É possível passar oid
da foto como atributophoto_id
do novo item do pedido?
Até agora eu tenteilink_to [:new, @order, :order_item], :photo_id => photo.id
, mas isso não parece funcionar. Eu também tentei colocar:photo_id
em um hash explícito. Existe uma maneira de seguir essa nova sintaxe e obter essa funcionalidade?
Update: Eu realmente espero encontrar algo do tipo:
link_to "new photo", [:new, @order, :order_item => {:photo_id => photo.id}]
where estou fazendo um: build, mas com mais do que apenas os atributos do modelo do construtor que estão sendo fornecido
ATUALIZA 11 de abril de 2011 Eu trabalhei onde eu posso passar um atributo para uma solicitação get usandopolymorphic_url
como visto abaixo:
# 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 deveria estar funcionando. Eu posso ver a solicitação get que parece estar funcionando conforme o esperado:
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"}
e o URL é o esperado, mas o formulário não parece capturar essa variável do URL.
O: order_id funciona. O: photo_id, no entanto, não parece estar sendo carregado para a nova página OrderItems #. Eu criei umtext_field
para:photo_id
, e está sempre vazio. Está noattr_accessible
. Não vejo por que não está funcionando.