Я пытаюсь удалить пользователя в моем приложении rails, вызвав @ user.destroy в userscontroller, но он показывает ошибку с зависимыми моделями.
Я использую devise, и я не знаю, есть ли другой способ уничтожения пользователя там. Я попытался изменить на delete_all, но не сработал, затем удалил «зависимый:: уничтожить» на модели пользователя в каждой строке «has_many» и вручную добавил в контроллер код для удаления тех объектов, которые зависят от этого пользователя, но он показывает мне та же ошибка.
user.rb
class User < ApplicationRecord
extend Devise::Models
require 'uri'
has_one_attached :profile_pic
has_many :comments, dependent: :destroy
has_many :posts, dependent: :destroy
has_many :blockeds, class_name: 'block', foreign_key: 'blocked_id', dependent: :destroy
has_many :owner_blocks, class_name: 'block', foreign_key: 'owner_id', dependent: :destroy
has_many :followers, class_name: 'follow_user', foreign_key: 'followed_id', dependent: :destroy
has_many :following, class_name: 'follow_user', foreign_key: 'follower_id', dependent: :destroy
has_many :taggeds, class_name: 'tag', foreign_key: 'tagged_id', dependent: :destroy
has_many :taggers, class_name: 'tag', foreign_key: 'tagger_id', dependent: :destroy
has_many :achievements, through: :achievement_users, dependent: :destroy
has_many :downvote_comments, dependent: :destroy
has_many :upvote_comments, dependent: :destroy
has_many :upvote_posts, dependent: :destroy
has_many :downvote_posts, dependent: :destroy
has_many :follow_posts, dependent: :destroy
has_many :mark_innapropiateds, dependent: :destroy
comment.rb
class Comment < ApplicationRecord
belongs_to :user
belongs_to :post
users_controller.rb
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
format.json { head :no_content }
end
end
Миграция за комментарий
class CreateComments < ActiveRecord::Migration[5.2]
def change
create_table :comments do |t|
t.references :user, foreign_key: true
t.references :post, foreign_key: true
t.string :content
t.timestamps
end
end
end
index.html.erb (где я вызываю метод уничтожения для пользователя)
<% @users.each do |user| %>
<tr>
<td><%= user.nickname %></td>
<td><%= user.email %></td>
<td><%= user.role %></td>
<td><%= user.last_sign_in_at %></td>
<td><%= link_to 'Show', user, class: "btn btn-primary" %></td>
<td>
<% if user.role=='user' %>
<%= form_with(model: user, local: true, action: 'make_admin') do |form| %>
<%= form.hidden_field :role, value: 'admin' %>
<%= form.submit "Make Admin", class: 'btn btn-primary' %>
<% end %>
<% end %>
</td>
<td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' }, class: "btn btn-primary"%></td>
</tr>
<% end %>
Я ожидал, что пользователь будет удален со всеми зависимыми от него объектами (в данном случае их комментариями). Это только показывает мне ошибку с комментариями, но я предполагаю, что это покажет мне ту же ошибку для других моделей. Это ошибка:
SQLite3::ConstraintException: FOREIGN KEY constraint failed: DELETE FROM "comments" WHERE "comments"."id" = ?
УДАЛИТЬ /users/1.json
def destroy
@user.destroy (<-- here is remarked)
respond_to do |format|
format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
format.json { head :no_content }
Параметры:
{"_ method" => "delete", "authenticity_token" => "tLUFwuWcM27OKSgrJLoxHTznr82DIFCPFF + InWYnNRpGRyqI5ZIrbUIIP0oaWCB8mVR5mIBI1SPS5E1=n} * * = = 1" = = 1 "= = 1" = = 1 "= = 1" = = = 1 "= = = 1" = = 1 "= = = 1" = = = 1 "= = 1" = = = 1 "= = 1" = = = 1 "= = 1" = = = 1 "= = 1" = = = 1 "= = 1" = = = 1 "= = 1" = = = 1 "= =" 1 = "= 1" = = = 1 "= =" 1 = = 1 "= =" 1 = "= 1" = = "1 =" = 1 = "1 =" = 1 "= =" 1 = "= 1" = "= 1