我知道如何以愚蠢的方式传递参数。例如,
<%= link_to "Order", new_order_item_path(:item_id => @item.id) %>
OrderItemsController以params[:item_id] = id
收到它。
问题:
@order_item = OrderItem.new(params)
引发异常(无法批量分配受保护的属性:action,controller)。我可以使用以下代码解决这个问题。
@order_item = OrderItem.new
@order_item.item_id = params[:item_id]
我知道控制器需要params[:order_item][:item_id]
才能使新工作以第一种方式工作。我的问题是,如何让new_order_item_path
生成网址?我知道这不是一个主要问题,但它只是让我觉得我不知道更清洁/正确的方法。我尝试过搜索,但只收到了无关的问题/答案/结果。
由于
答案 0 :(得分:0)
您没有真正指定是否不想使用它,但在您的模型中,您可以使属性item_id可以这样访问:
class OrderItem < ActiveRecord::Base
attr_accessible :item_id
...
通过这种方式,
@order_item = OrderItem.new(params)
会起作用。
希望这有帮助。
答案 1 :(得分: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 -->