1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】(補足)フォロー機能を実装

Last updated at Posted at 2020-12-22

概要

以下の参照記事にしたがって進めたら、フォロー機能を実装することができました。

実装方法の大半は参照記事に書かれているので、そちらをご覧いただければと思います。

本記事では補足内容を備忘録として記録いたします。

参照記事

↓以下の記事にお世話になりました。ありがとうございます。

完成イメージ

今回は、写真投稿アプリを題材に、フォロー機能を作成し、ユーザーページと写真詳細ページにフォローボタンを設置する方法を説明します。

  • ユーザーページ
    Image from Gyazo

  • 写真詳細ページ
    Image from Gyazo

開発環境

  • macOS Catalina 10.15.7
  • ruby 2.6.5
  • Rails 6.0.3.4

実装の流れ

  1. フォロー機能を作成
  2. フォローボタンをユーザーページと写真詳細ページに設置

今回のコード

1. フォロー機能を作成

↓以下をご参照くださいm(_ _)m

補足として、参照記事である方がコメントされているように、relationships_controller.rbのコードを以下のように修正しました。

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>

relationships_controller.rb
    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に格納しました。

↓このように

photos_controller.rb
  def show
    @user = Photo.find(params[:id]).user
  end

faind_byだと挙動がおかしくなったので、findを使用しています。

おわりに

このようにして、フォロー機能を実装しました。参照記事内のコードについて、難しいところもあり、まだ完全には理解できておりません。追々理解していければと思います。

フォロー機能における各テーブルのアソシエーションについては以下の記事でも詳しく説明されていますので、ご参照ください。
https://bit.ly/2WztOY9

初学者のため、間違いや改善点などありましたらご指摘お願いいたしますm(_ _)m

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?