【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情報を付け加えただけですね!