rails初心者です。
エラーが直せないので助けていただきたいです。
userとarticleの作成が終わり、いいね機能を実装しようとしたところ以下のようなエラーが出ました。
-- create_table("articles", {:options=>"ENGINE=InnoDB DEFAULT CHARSET=utf8", :force=>:cascade}) rake aborted! ActiveRecord::StatementInvalid: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails: DROP TABLE IF EXISTS `articles` CASCADE
articleの実装まではエラーが出てなかったので、いいね機能の実装のどこかでミスがあったのだと思います。
いいね機能の実装で追加したコードは以下のうようになります。
マイグレーションファイル
class CreateLikes < ActiveRecord::Migration[5.2] def change create_table :likes do |t| t.references :article, foreign_key: true t.references :user, foreign_key: true t.timestamps end end end
like.rb
like.rb
1class Like < ApplicationRecord 2 belongs_to :user, optional: true 3 belongs_to :article, optional: true 4 validates_uniqueness_of :article_id, scope: :user_id 5end
likes_controller.rb
class LikesController < ApplicationController before_action :authenticate_user!, only: [:create, :destroy] def create @like = current_user.likes.create(article_id: params[:article_id]) flash[:success] = 'お気に入りに追加しました' redirect_back(fallback_location: root_path) end def destroy @like = Like.find_by(article_id: params[:article_id], user_id: current_user.id) @like.destroy flash[:success] = 'お気に入りから削除しました' redirect_back(fallback_location: root_path) end end
user.rb
class User < ApplicationRecord has_many :articles, foreign_key: :user_id, dependent: :destroy has_many :likes, foreign_key: :user_id, dependent: :destroy has_many :liked_articles, through: :likes, source: :article
article.rb
class Article < ApplicationRecord belongs_to :user has_many :likes, foreign_key: :article_id, dependent: :destroy has_many :liked_users, through: :likes, source: :user
dependent: :destroyを書いているのにも関わらずエラーが出て困っています。
どなたかアドバイスをお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。