概要
以下の参照記事にしたがって進めたら、フォロー機能を実装することができました。
実装方法の大半は参照記事に書かれているので、そちらをご覧いただければと思います。
本記事では補足内容を備忘録として記録いたします。
参照記事
↓以下の記事にお世話になりました。ありがとうございます。
- Railsでフォロー機能を作る方法
https://qiita.com/mitsumitsu1128/items/e41e2ff37f143db81897
完成イメージ
今回は、写真投稿アプリを題材に、フォロー機能を作成し、ユーザーページと写真詳細ページにフォローボタンを設置する方法を説明します。
開発環境
- macOS Catalina 10.15.7
- ruby 2.6.5
- Rails 6.0.3.4
実装の流れ
- フォロー機能を作成
- フォローボタンをユーザーページと写真詳細ページに設置
今回のコード
1. フォロー機能を作成
↓以下をご参照くださいm(_ _)m
- Railsでフォロー機能を作る方法
https://qiita.com/mitsumitsu1128/items/e41e2ff37f143db81897
補足として、参照記事である方がコメントされているように、relationships_controller.rbのコードを以下のように修正しました。
private
def set_user
@user = User.find(params[:follow_id])
end
- 参照記事ではメソッド名が抜けていたため、
set_user
を付け加えました。 -
@user = User.find(params[:relationship][:follow_id])
を@user = User.find(params[:follow_id])
に変更しました。binding.pryでparamsの中身を確認したところ、:relationship
というキーは存在せずエラーとなりました。そのため[:relationship]
を削除しました。
↓コンソールで確認したparamsの中身です
[1] pry(#<RelationshipsController>)> params
=> <ActionController::Parameters {(省略) "follow_id"=>"1", "commit"=>"フォローする", "controller"=>"relationships", "action"=>"create"} permitted: false>
if following.save
flash[:success] = 'ユーザーをフォローしました'
redirect_to user_path(@user)
- フォローボタンクリック後の遷移先パスを修正しました。今回はひとまず、クリック後、
redirect_to user_path(@user)
でユーザーページに遷移するようにしました。
2. フォローボタンをユーザーページと写真詳細ページに設置
参照記事にしたがって、フォローボタンを_follow_button.html.erb
という部分テンプレートに作成しました。
この部分テンプレートをユーザーページと写真詳細ページで呼び出すことで、両ページにフォローボタンが設置されます。
例えば、
<%= render 'shared/follow_button', user: @user %>
と記入して、フォローボタンの部分テンプレートを呼び出します。
@user
には、フォローするユーザーのレコードを各コントローラーで格納します。
例えば、写真詳細ページでは、params内の写真idから写真レコードを取得し、さらにそれに紐づくユーザーレコードを取得し@user
に格納しました。
↓このように
def show
@user = Photo.find(params[:id]).user
end
faind_by
だと挙動がおかしくなったので、find
を使用しています。
おわりに
このようにして、フォロー機能を実装しました。参照記事内のコードについて、難しいところもあり、まだ完全には理解できておりません。追々理解していければと思います。
フォロー機能における各テーブルのアソシエーションについては以下の記事でも詳しく説明されていますので、ご参照ください。
https://bit.ly/2WztOY9
初学者のため、間違いや改善点などありましたらご指摘お願いいたしますm(_ _)m