LoginSignup
0
0

More than 3 years have passed since last update.

複数のハッシュからストロングパラメーターを設定したい

Posted at

複数のハッシュからのストロングパラメーターの設定に関して

色々参考にさせていただきながらネストしたパラメーターの取り出し方などは確認させてもらいましたが、なぜかうまく取り出すことができず、試行錯誤した結果を備忘録として残します。きっともっと簡単(正式)なやり方があるかと思うのですが、ご容赦ください。

今回は下記のパラメーターから「item」でハッシュされたものと「image」でハッシュされたものをmergeしてコントローラーへ渡し保存します。

このパラメーター(中身は微修正しています)を

 pry(#<ItemsController>)> params
=> <ActionController::Parameters {"authenticity_token"=>hoge==", "image"=><ActionController::Parameters {"images"=>(中略)Type: image/jpeg\r\n">]} permitted: false>, "item"=><ActionController::Parameters {"name"=>hoge, "info"=>hoge, "category_id"=>1, "sales_status_id"=>"2", "shipping_fee_status_id"=>"3", "prefecture_id"=>"3", "scheduled_delivery_id"=>"2", "price"=>"4000"} permitted: false>, "commit"=>"出品する", "controller"=>"items", "action"=>"create"} permitted: false>

下記コントローラーへ送って保存したい。

  def create
    @item = Item.new(item_params)
  end

結果

def create
    @item = Item.new(item_params)
  end

private

 def item_params
    image_params = params.require(:image).permit(images: [])
    params.require(:item).permit(:name, :info, :category_id, :sales_status_id, :shipping_fee_status_id, :prefecture_id,
                                 :scheduled_delivery_id, :price).merge(user_id: current_user.id, images: image_params[:images])               
end

試行錯誤の内容

まず、今までの知識で考えて、上記はベースとしつつもmargeの中でimagesを取り出しスマートに送るはずが、、うまくいかず。。

一度、reqireを外してpermit で全てを指定いくため、ネストなどの関係も記述するもうまくいかず。

慣れないことをするよりも今の知識でできる方法がないかと模索し、一度imagesだけを取り出して、それをmergeする方法にたどり着き、

def item_params
    image_params = params.require(:image).permit(images: [])
    params.require(:item).permit(:name, :info, :category_id, :sales_status_id, :shipping_fee_status_id, :prefecture_id,
                                 :scheduled_delivery_id, :price).merge(user_id: current_user.id, images: image_params)               
end

とするも、Could not find or build blob: expected attachableというエラーで、何やら見つからなかったとのこと。

再度パラメーターを確認すると、ハッシュに組み込まれているものの、image_paramsに"images"=><ActionController::Parametersが代入したimage_params余計に含まれている模様。

上記をそのままmergeしたのでエラーとなったようですね。ここから先ほど少し学習したネストを思い出し、この中からimeges以降を取り出せないかとやった結果が上記となります。

絶対にもっとスマートなやり方がある!とささやくもう一人の自分を押し殺し数時間に及ぶ戦いに終止符が打たれました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0