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_pathURL を生成できますか? これが大きな問題ではないことはわかっていますが、これを行うためのよりクリーンで適切な方法がわからないことは私を悩ませています。検索してみましたが、無関係な質問/回答/結果しか受け取りませんでした。

ありがとう

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 に答える