我目前正在尝试使用link_to
创建链接以动态创建项目的辅助方法,而不是使用这些new_object_path
方法。Rails 3 允许多态 URL,fl00r 帮助我识别并以我最初搜索的形式使用。但是,虽然使用此处所示的 Railspolymorphic_url
方法确实在 http 请求中传递了参数,但返回页面上的相关表单字段未填写,也未设置。我正在尝试order_item
从一个order
也从一个photo
.
有谁看到这里出了什么问题?相关代码如下:
# 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
这是原始问题:
我正在尝试创建一个链接以创建可以在链接中传递的 [:new, @order, @order_item]
位置。@order_item.photo_id
现在,我不确定这是否有意义,所以我将尝试在这里澄清我的问题。
据我所见,Rails 3 有一种新语法,用于使用结构化为[:action, object]
或用于深度嵌套资源的数组链接到资源操作,[:action, parent, child]
. 对于这个特定示例,我使用的是link_to [:new, @order, :order_item]
. 这些按钮将附加到照片库中的每张照片上。
是否可以将id
照片的属性photo_id
作为新订单商品的属性传递?
到目前为止,我已经尝试过link_to [:new, @order, :order_item], :photo_id => photo.id
,但这似乎不起作用。我也尝试过:photo_id
输入一个明确的哈希值。有没有办法遵循这种新语法并实现此功能?
更新:我真的希望找到类似的东西:
link_to "new photo", [:new, @order, :order_item => {:photo_id => photo.id}]
我在做一个 :build 但不仅仅是提供来自构建器模型的属性。
2011 年 4 月 11 日更新polymorphic_url
我得到了它,我可以使用如下所示将属性传递到获取请求中:
# 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
这似乎应该工作。我可以看到似乎按预期工作的获取请求:
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"}
并且 url 符合预期,但表单似乎没有从 url 中捕获该变量。
:order_id 有效。但是 :photo_id 似乎没有转移到 OrderItems#new 页面。我创建了一个text_field
for :photo_id
,每次都是空的。它在attr_accessible
. 我不明白为什么它不起作用。