※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
アンフォローを実装する
routes.rbに以下を追記する
resources :accounts, only: [:show] do
resources :follows, only: [:create]
resources :unfollows, only: [:create]
end
今回は、「followをdestroyする」のではなく、「unfollowをcreateする」もの
(Relationshipをdestroyする、ならまだ分かる)
RESTfulとは、railsの基本的な概念のこと
※DHHさんはrailsを作った人
コントローラはデフォルトのCRUDアクション
index
、show
、new
、edit
、create
、update
、destroy
のみを使うべきだということ
自分の作ったコントローラの状態を悔やむのは決まって、作ったコントローラの数が少なすぎた時です。多くの処理を任せようとしすぎてしまうんです。
わかりやすくシンプルにすること!
unfollows_controller.rbを作り、以下を書く(Followsとほぼ同じ)
class UnfollowsController < ApplicationController
before_action :authenticate_user!
def create
current_user.unfollow!(params[:account_id])
redirect_to account_path(params[:account_id])
end
end
user.rbを開く
def follow!(user)
user_id = get_user_id(user)
following_relationships.create!(following_id: user_id)
end
def unfollow!(user)
user_id = get_user_id(user)
relation = following_relationships.find_by!(following_id: user_id)
relation.destroy!
end
private
def get_user_id(user)
if user.is_a?(User)
user.id
else
user
end
end
共通して使うメソッドget_user_id(user)
は、private
内で定義する
同じコードをあちこちで使うと保守性が悪くなるうえに、バグの原因にもなる
_profile.html.hamlで以下に書き換える
= link_to 'Unfollow', account_unfollows_path(user), data: { method: 'post'}
#DAY3