##前提・実現したいこと
中間テーブルを用いた商品の確認機能を実装後、user削除ができなくなりました。
これを解決したいです!
ちなみにuserを削除してもそのユーザーが投稿した商品は削除しないです。
##発生している問題・エラーメッセージ
ActiveRecord::InvalidForeignKey in UsersController#destroy Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails (`kyo_yu_2021_development`.`items`, CONSTRAINT `fk_rails_d4b6334db2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) Extracted source (around line #9): def destroy @user = User.find(params[:id]) ????ここが赤いです if @user.destroy redirect_to root_path end end
##該当のソースコード
ruby
1app/models/user.rb 2 3class User < ApplicationRecord 4 # Include default devise modules. Others available are: 5 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 6 devise :database_authenticatable, :registerable, 7 :recoverable, :rememberable, :validatable 8 9 validates :user_name, presence: true 10 11 has_many :items, dependent: :destroy 12 has_many :web_confirmations, dependent: :destroy 13 has_many :items, through: :web_confirmations, dependent: :destroy 14 has_many :local_confirmations, dependent: :destroy 15 has_many :items, through: :local_confirmations, dependent: :destroy 16end
ruby
1app/models/item.rb 2 3class Item < ApplicationRecord 4 5 belongs_to :user 6 has_one_attached :image, dependent: :destroy 7 has_many :web_confirmations, dependent: :destroy 8 has_many :users, through: :web_confirmations, dependent: :destroy 9 has_many :local_confirmations, dependent: :destroy 10 has_many :users, through: :local_confirmations, dependent: :destroy 11 extend ActiveHash::Associations::ActiveRecordExtensions 12 belongs_to :stock 13 14 with_options presence: true do 15 validates :image 16 validates :name, length: { maximum: 50 } 17 validates :text, length: { maximum: 1000 } 18 validates :deployment 19 validates :arrival_day 20 end 21 validates :stock_id, numericality: { other_than: 1 } 22 23 def self.search(search) 24 if search != "" 25 Item.where('name LIKE(?) or text LIKE(?) or arrival_day LIKE(?)', "%#{search}%", "%#{search}%", "%#{search}%") 26 else 27 Item.all.order("created_at DESC").limit(10) 28 end 29 end 30end
ruby
1app/models/web_confirmation.rb 2 3class WebConfirmation < ApplicationRecord 4 5 belongs_to :user 6 belongs_to :item 7 8 validates_uniqueness_of :item_id, scope: :user_id 9end
ruby
1app/models/local_confirmation.rb 2 3class LocalConfirmation < ApplicationRecord 4 5 belongs_to :user 6 belongs_to :item 7 8 validates_uniqueness_of :item_id, scope: :user_id 9 10end
web_confirmation.rbとlocal_confirmation.rbはuserとitemの中間テーブルです
##試したこと
初めはitem(商品)も削除出来なくなっていましたが、外部キーを持つデータのdestroyを行うための設定を調べた結果、dependent: :destroyを付与することで解決しました。
同様にuserもそうしてみましたが解決できません。
ぜひご意見お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/04 13:33
2021/04/04 13:44
2021/04/04 14:16
2021/04/04 14:42
2021/04/05 00:30
2021/04/05 02:47
2021/04/05 04:25