※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
viewにフォローボタンを実装する
前回、フォローボタンを設置するためのアカウントページを作成
今回はいよいよ、アカウントページにフォローボタンを実装する
followするためのパスを作る
routes.rbを開く
「account/follow」のurlパスを作る(入れ子構造)
resources :accounts, only: [:show] do
resources :follows, only: [:create]
end
↓ followするための「post」リクエストがうまれる
_profile.html.hamlにpostリクエストを貼る
= link_to 'Follow', account_follows_path(user), data: { method: 'post'}
このままだとフォローできない(エラー)
「undefined method `id’ for “1”:String」のエラーが起きる
これは、「1」という文字列に「id」のメソッドはないよという意味
# 裏ではこういう事態が起きている
>> "1".id
!! #<NoMethodError: undefined method `id' for "1":String>
>> user
=> "1"
user.idのuserとは、Userクラスのインスタンスを想定しているが、それが認識されていない
# app/models/user.rb
def follow!(user)
following_relationships.create!(following_id: user.id)
end
FollowsControllerでも「(params[:account_id])」しか渡していない
「user」の分岐
- Userクラスのインスタンスである場合
- そうじゃない場合
models/user.rbを開く
def follow!(user)
if user.is_a?(User)
user_id = user.id
else
user_id = user
end
following_relationships.create!(following_id: user_id)
end
- user.idがわたってきた場合 → 「user_id」に入れる
- userにuser.idが入って渡されてきた場合 → 「user_id」に入れる
※今回エラーがおきたのは後者のケースだったため(user => “1”)
どちらのケースであっても、user_idに適切な値が渡されるようにしておく
if ●●.is_a?(◯◯)
「●●が◯◯クラスのインスタンスであるかどうか」判定してくれるrailsのメソッド
これでエラーなくフォローができるようになった!
#DAY3