フォロー機能を実装するためにUserモデルと中間テーブルのRelationshipモデルを作成。
.
.
def follow(other_user)
unless self == other_user
self.relationships.find_or_create_by(follow_id: other_user.id)
end
end
こんな感じでfollowメソッドを作り、relation_controllerの該当アクション内で呼び出したところ、タイトルのエラーが出てきた。
テーブルがないと言われているけど必要なテーブルがあることはschemaファイルからも確認できたので混乱。
原因
原因としてはrelationshipsテーブルを作るときのmigrationファイルに問題があった
class CreateRelationships < ActiveRecord::Migration[5.2]
def change
create_table :relationships do |t|
t.references :user, foreign_key: true
t.references :follow, foreign_key: true
t.timestamps
end
add_index :relationships, [:user_id, :follow_id], unique: true
end
end
こちらのfollow_idカラムを作成する部分、t.references :follow, foreign_key: true
のforeign_keyがtrueとなっている部分が原因でした。
foreign_keyがtrueになっているとid名と同じテーブルが存在するか、つまりありもしないfollowテーブルがあるかを確認してしまうため、エラーが吐き出されていたようです。
解決法としては該当部分に
t.references :follow, foreign_key: { to_table: :users }
と参照するテーブルを記述することで正しく動作しました。
rails g model relationships follow:references
とターミナルで自動作成されたマイグレーションファイルはデフォルトでforeign_key:true
となるので気を付けたいところです。