【Rails】マイページの実装

ここではマイページの実装を通して、アソシエーションやN+1問題に関して

お話ししていこうと思います。

 

現状だといろんな人の投稿が一覧表示されていますが、

自分だけの投稿に絞って見ることができません。

 

そこで投稿を保存するときに、

それぞれユーザー情報も一緒に保存する必要があります。

 

そのためにはまずpostsテーブルにuser_idカラムを追加しましょう。

rails g migration AddUserIdToPosts user_id : integer

これは説明していませんでしたが、

このような形で命名規則にしたがってコマンドを実行すると

自動でコードが記載されたマイグレーションを生成します。

その後、マイグレーションファイルの実行を行いましょう。

 

これでマイグレーションを編集せずに

postsテーブルにuser_idカラムが追加されました。

 

そして実際に投稿にuser_idを紐づけていきましょう。

その際に使用するのがcurrent_userメソッドです。

こちらはdevise導入で使用できるメソッドです。

このメソッドで現在ログインしているユーザーの情報を取得することが可能です。

 

なのでどうしたいか整理すると、今やりたい処理は

投稿データが入ったparamsの情報と、

current_userメソッドで取得したログイン中のユーザーのidを結合させて

テーブルに送られて来るようにすること。ですね。

 

そこで2つのハッシュを統合するときに使用するのがmergeメソッドです。

ではこれを使って実際にparamsとcurrent_userを結合させてみましょう。

 

まずはparamsにはどんな情報が入っているでしょう。

params. require( : post ) . permit ( :name , : image ,  :text )

だとします。

 

current_userメソッドの中身はどうでしょうか。

 user id = { user_id :  " 1 " }

だとしましょう。

 

これをmergeメソッドを使ってくっつけます。

paramsの記述を編集しましょう。

 

private

def  post_params

   params. require( : post ) . permit ( :name , : image ,  :text ) . merge ( user_id :          current_user . id)

end

 

となります。

mergeメソッドを使ってuser_id情報を付け加えただけですね!