LoginSignup
23
24

More than 1 year has passed since last update.

【Rails】パラメーター値の取得(paramsメソッドの使い方)

Last updated at Posted at 2019-04-19

フォーム情報を取得してインスタンスを生成する、というのはアプリケーションの醍醐味です。

このフォームから送られた値を取得するためのparamsメソッドについて、つまづくことが多かったので、簡単に整理します。

オリジナルアプリ制作時のパラーメータを題材にしています。

Parameters: {"utf8"=>"✓", 
"authenticity_token"=>"6YAg0qEsGyxdHWJspI1f2sgzrztYo5cZhSkRHGBgLrVEHvMLdo3xBkJznCFlOIc/650K8ZntJVDWIZejLdQd9g==", 
"post"=>{"product_id"=>"1", "title"=>"おいしい", "rate"=>"5", "content"=>"素晴らしい商品"}, 

まず、Parameterは上記のように格納されています。

言わずもがな、"キー"=>値という形式です。

Postモデルのインスタンスであるpostはキーとして機能しています。

postというキーに対してハッシュで{"product_id"=>"1", "title"=>"おいしい", "rate"=>"5", "content"=>"素晴らしい商品"}という値が保存されているわけです。

ややこしいですよね。

基本

postの中の値product_idをPostモデルより取得しインスタンス変数を生成する場合を考えます。

@post = Post.find(product_id: params[:product_id])

応用

postの中の値'product_id'をProductモデルで取得しインスタンス変数を生成する場合を考えます。

前提として、ProductモデルとPostモデルは一対多の関係性にあります。

@product = Product.find(id: params[:post][:product_id])

パラメーターからProductモデルを探索す場合、まずは、キー値の[:post]を指定し、次にハッシュ値の中のキー値[:product_id]を指定する必要があります。

この時、[:post]を指定してあげないと、下記のようなエラーが出るので注意ですね。

ActiveRecord::RecordNotFound in PostsController
Couldn't find Product without an ID

23
24
2

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