2020年12月12日土曜日

RubyOnRails: 入れ子のパラメータをストロングパラメータする。

purchase(購入)に複数のitem(=items 商品)がネストしているパラメータを受け取って、 permitして返すメソッドを作る場合、
purchaseは普通にpermitすればいいが、itemsをどうpermitするか。

(メソッドの呼び出し元では permited_parameter.items.first.product_name のように、 itemの属性にもメソッドチェーンしてアクセスしたい。)

以下な感じでする。
def permited_parameters
  params.require(:purchase).map do |purchase|
    visit.permit(
      :customer_name,
      :customer_address
    ).merge(
      items: visit[:items].map do |item|
        item.permit(
          :product_name,
          :count,
          :price
        )
      end
    )
  end
end

0 件のコメント:

コメントを投稿