0

我目前正在尝试使用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_fieldfor :photo_id,每次都是空的。它在attr_accessible. 我不明白为什么它不起作用。

4

2 回答 2

1

不。

你可以试试这个

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

或老学校link_to

link_to "New ...", new_order_order_item(@order, :photo_id => photo.id)
于 2011-04-11T14:32:55.977 回答
0

我终于想通了这件事。

在我的 OrderItemsController#new 操作中,我的build函数要么不带参数,要么params[:order_item]作为参数。由于从 传递的参数polymorphic_url实际上与任何对象无关,而只是一个原始属性,因此我尝试简单地将整个params哈希传递给构建函数。像魅力一样工作。所以我使用这个代码作为链接:

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

我的控制器中的这段代码:

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

现在整个 params 哈希都已通过,表单可以在构建新订单项时找到正确的照片。

于 2011-04-26T05:08:29.087 回答