質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

887閲覧

rails 外部キーのエラーが直せない

yokorails

総合スコア4

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/03/29 07:58

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を書いているのにも関わらずエラーが出て困っています。
どなたかアドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

1)まず、何をした時に発生したエラーなのかを明示してください。
2)エラーメッセージは省略しないでください

その辺りが無いのではっきりしませんが、エラーとは直接関わり無いところかも、ですがまずい所があります。
class Like < ApplicationRecord belongs_to :user, optional: true belongs_to :article, optional: true validates_uniqueness_of :article_id, scope: :user_id end
Likeは必ずUsrともArticleとも関わるのですから、optional: trueは有害無益です。foreign_key: trueとも矛盾しますし。

投稿2020/03/29 23:44

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問