建立从多个父对象的嵌套属性(Building a nested attribute from mul

2019-10-29 06:25发布

我目前正在尝试使用link_to与创建用于动态创建的项目,而不是使用链接的helper方法new_object_path方法。 Rails 3中允许多态的URL,这fl00r帮助我识别和形式我本来正在寻找使用。 然而,在使用Rails的polymorphic_url如下所示方法并通过HTTP请求的参数,返回的页面上的相关表单字段没有填写,并没有得到设置。 我试图建立一个order_itemorder也从一个内置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}]

在那里我有种做:建立但比刚刚从供应的建设者模型的属性更多。

UPDATE 2011年4月11日我得到它的工作,我可以传递一个属性到使用GET请求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

这似乎是它应该是工作。 我可以看到,似乎是工作按预期GET请求:

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中的变量。

的:ORDER_ID作品。 的:photo_id,但是,似乎并不被结转到的OrderItems#新的一页。 我创建了一个text_field:photo_id ,每一次它是空的。 它在attr_accessible 。 我不明白为什么它不工作。

Answer 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)


Answer 2:

我终于想通这件事了。

在我OrderItemsController#新的动作,我的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散列获得通过,建立新的订单项目时,形式可以找到正确的照片。



文章来源: Building a nested attribute from multiple parent objects