はじめに
本記事では、フォロー機能時に発生した
ActiveModel::UnknownAttributeError
というエラーの解決した方法を記述します。
仲間に助けてもらいながら実装できたため、個人でもアウトプットして身につけたいと思い、記事にしました。
エラー画面
attribute
=属性
という意味。(Google先生)
Relationshipにuser_id
という属性は知らん。と怒られました。
確かに、user_id
はありません。
しかし、binding.pry
でparams[:user_id]の値取れてるじゃないですか...。
と言い訳してみたはいいものの、まあカラムにないわけですからなんとかします。
コード
実際のコードがこれです。
class RelationshipsController < ApplicationController
before_action :authenticate_user!
def create
following = current_user.relationships.build(follower_id: params[:user_id])
following.save
redirect_to request.referrer || root_path
end
def destroy
following = current_user.relationships.find_by(follower_id: params[:user_id])
following.destroy
redirect_to request.referrer || root_path
end
end
following = current_user.relationships.build(follower_id: params[:user_id])`
エラーの内容的にここだよね。と思ったので、もうピンポイントで突き止めていきます。
結論
class RelationshipsController < ApplicationController
before_action :authenticate_user!
def create
following = Relationship.create(follower_id: params[:user_id], following_id: current_user.id)
redirect_to request.referrer || root_path
end
def destroy
following = Relationship.find_by(follower_id: params[:user_id], following_id: current_user.id)
following.destroy
redirect_to request.referrer || root_path
end
end
following = Relationship.create(follower_id: params[:user_id], following_id: current_user.id)
Relationshipモデルにcreateメソッドつけて、
カラムであるfollower_id
とfollowing_id
をセッターにして、
それぞれ値を入れ込めば完了。
敗因
①Relationship.create(follower_id: params[:user_id], following_id: current_user.id)
の形で値を入れることを理解できていなかった。
②なんとかして、変数を作って入れることしか考えていなかった。
別解として、
カラムをfollowing
をuser_id
に変えてしまう手もあったようです。
終わりに
完全に仲間に助けてもらい、解決しました。
同じスタートを切ったはずなのに差ができていたことに愕然としたものの、
みんなでディスカッションしながらコードを眺めるのも、楽しいなと感じました。
Railsでフォロー機能を作る方法
【Ruby on Rails】フォロー機能を作ろう(PART2)How to set up a Follower Following system in Ruby on Rails
2つ目はYouTubeですが、
この方の動画はかなり参考になるかと思います。
今日は週末ですが、
明日も頑張ります!!