4

我知道如何以愚蠢的方式传递参数。例如,

<%= link_to "Order", new_order_item_path(:item_id => @item.id) %>

OrderItemsController 将其接收为params[:item_id] = id.

问题:

@order_item = OrderItem.new(params)

引发异常(无法批量分配受保护的属性:动作、控制器)。我可以使用以下代码解决此问题。

@order_item = OrderItem.new
@order_item.item_id = params[:item_id]

我知道控制器需要params[:order_item][:item_id]new 以第一种方式工作。我的问题是,如何new_order_item_path生成 url?我知道这不是一个主要问题,但它只是让我感到困扰,我不知道更清洁/正确的方法来做到这一点。我试过搜索,但只收到不相关的问题/答案/结果。

谢谢

4

2 回答 2

0

您并没有真正指定是否不想使用它,但是在您的模型中,您可以像这样使属性 item_id 可访问:

class OrderItem < ActiveRecord::Base
   attr_accessible :item_id
...

这样,

@order_item = OrderItem.new(params)

会工作。

希望这可以帮助。

于 2012-05-23T21:34:14.833 回答
0

这个怎么样:

# Controller
def get_item_edit_method
  @order = OrderItem.find("your criteria")
  #@order = OrderItem.new # if new
  @item = Item.new() 
end

def post_item_edit_method
  @order = OrderItem.new(params) # should work now
  @order.save
end
# End controller

<!-- view -->
<% @order.item = @item %>
<%= link_to "Order", new_order_item_path(@order) %>
<!-- end view -->
于 2014-07-25T19:39:22.780 回答