2012-05-17 60 views
4

我知道如何以愚蠢的方式傳遞參數。例如,如何在Rails路由幫助器方法中傳遞參數?

<%= 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_order_item_path來生成url?我知道這不是一個主要問題,但它讓我感到困惑,我不知道這樣做的更清潔/正確的方式。我嘗試過搜索,但只收到無關的問題/答案/結果。

感謝

+0

10秒問我意識到new_order_item_path(:order_item => {:ITEM_ID => @ item.id})的作品。這感覺有點匪夷所思,但它有效。 – James

+0

你應該發佈作爲答案接受它,我跑了也在這個問題上,可以幫助 –

回答

0

你真的不指定,如果你不想使用與否,但在你的模型,你可以把屬性ITEM_ID訪問像這樣:

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

在這樣,

@order_item = OrderItem.new(params) 

會工作。

希望這會有所幫助。

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