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.

questionAnswers(2)

yourAnswerToTheQuestion