ActiveRecord在用户被销毁后检查数据库中的用户,结果为404

问题描述 投票:0回答:1

我在ActiveRecord的UserController中有一个destroy方法。

class Api::V1::UsersController < ApplicationController
  skip_before_action :authorized, only: [:create, :destroy]

  def create
    @user = User.new(user_params)
   if @user.save
    token = issue_token({ user_id: @user.id})
    render json: { user: @user, jwt: token}, status: 201
   else
    render json: {message: "Username is already taken" }, status: 400
   end
  end

  def show
   @user = User.find(params[:id])
   render json: {user: @user}, status: 201
  end

  def update
    @user = User.find(params[:id])
   if @user == current_user
    @user.update_attributes(user_params)
    render json: {user: @user}, status: 201
   else
    render json: {message: "Unable to update"}, status: 400
   end
  end

  def destroy
    @user = User.find(params[:id])
   if @user == current_user
    @user.destroy
    render json: {message: "Your account was deleted"}, status: 200
   else
    render json: {message: "You cannot delete this account"}, status: 400
   end
  end


private

  def user_params
    params.permit(:username, :password, :image_uri, :description, :email, links: [])
   end

end

每次我发送一个删除请求到我的rails API ActiveRecord确实删除了记录,但最后它再次寻找用户。

Started DELETE "/api/v1/users/8" for 127.0.0.1 at 2017-12-30 15:18:32 -0500
Processing by Api::V1::UsersController#destroy as JSON
Parameters: {"username"=>"pam", "password"=>"[FILTERED]", "email"=>"pam", "id"=>"8", "user"=>{"username"=>"pam", "email"=>"pam"}}
User Load (1.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 8], ["LIMIT", 1]]
User Load (1.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 8], ["LIMIT", 1]]
(1.4ms)  BEGIN
UserFollower Load (1.4ms)  SELECT "user_followers".* FROM 
"user_followers" WHERE "user_followers"."follower_id" = $1  [["follower_id", 8]]
Story Load (1.6ms)  SELECT "stories".* FROM "stories" WHERE "stories"."user_id" = $1  [["user_id", 8]]
SQL (1.7ms)  DELETE FROM "users" WHERE "users"."id" = $1  [["id", 8]]
(2.2ms)  COMMIT
User Load (1.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 8], ["LIMIT", 1]]
Completed 404 Not Found in 414ms (ActiveRecord: 12.3ms)

我认为这可能与我的活跃记录协会有关?

class User < ApplicationRecord
 validates_presence_of [:username, :email, :password_digest]
 has_secure_password
 has_many :user_followers, class_name: "UserFollower", foreign_key: "follower_id", dependent: :destroy
 has_many :followers, through: :user_followers
 has_many :stories, dependent: :destroy
end

这是堆栈跟踪:

/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activerecord-5.1.4/lib/active_record/core.rb:189:in `find'
/Users/Josh/dev/mediumrare-rails/app/controllers/application_controller.rb:27:in `current_user'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/active_model_serializers-0.10.6/lib/action_controller/serialization.rb:30:in `serialization_sco
pe'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/active_model_serializers-0.10.6/lib/action_controller/serialization.rb:43:in `block in get_seri
alizer'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/active_model_serializers-0.10.6/lib/action_controller/serialization.rb:43:in `fetch'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/active_model_serializers-0.10.6/lib/action_controller/serialization.rb:43:in `get_serializer'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/active_model_serializers-0.10.6/lib/action_controller/serialization.rb:61:in `block (2 levels)
in <module:Serialization>'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/renderers.rb:149:in `block in _render_to_body_with
_renderer'
/Users/Josh/.rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/set.rb:306:in `each_key'
/Users/Josh/.rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/set.rb:306:in `each'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/renderers.rb:145:in `_render_to_body_with_renderer
'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/renderers.rb:141:in `render_to_body'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/abstract_controller/rendering.rb:24:in `render'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/rendering.rb:36:in `render'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in rend
er'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
/Users/Josh/.rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/benchmark.rb:308:in `realtime'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/core_ext/benchmark.rb:12:in `ms'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/instrumentation.rb:44:in `block in render'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activerecord-5.1.4/lib/active_record/railties/controller_runtime.rb:29:in `cleanup_view_runtime
'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/instrumentation.rb:43:in `render'
/Users/Josh/dev/mediumrare-rails/app/controllers/api/v1/users_controller.rb:34:in `destroy'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/abstract_controller/base.rb:186:in `process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/rendering.rb:30:in `process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/callbacks.rb:131:in `run_callbacks'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/abstract_controller/callbacks.rb:19:in `process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/rescue.rb:20:in `process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/notifications.rb:166:in `block in instrument'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/notifications.rb:166:in `instrument'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal/params_wrapper.rb:252:in `process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activerecord-5.1.4/lib/active_record/railties/controller_runtime.rb:22:in `process_action'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/abstract_controller/base.rb:124:in `process'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal.rb:189:in `dispatch'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_controller/metal.rb:253:in `dispatch'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/routing/route_set.rb:31:in `serve'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/journey/router.rb:50:in `block in serve'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/journey/router.rb:33:in `each'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/journey/router.rb:33:in `serve'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/routing/route_set.rb:834:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/rack-2.0.3/lib/rack/etag.rb:25:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/rack-2.0.3/lib/rack/conditional_get.rb:38:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/rack-2.0.3/lib/rack/head.rb:12:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activerecord-5.1.4/lib/active_record/migration.rb:556:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/callbacks.rb:26:in `block in call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/callbacks.rb:97:in `run_callbacks'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/callbacks.rb:24:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/executor.rb:12:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/railties-5.1.4/lib/rails/rack/logger.rb:36:in `call_app'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/railties-5.1.4/lib/rails/rack/logger.rb:24:in `block in call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:69:in `block in tagged'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:26:in `tagged'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/tagged_logging.rb:69:in `tagged'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/railties-5.1.4/lib/rails/rack/logger.rb:24:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/request_id.rb:25:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/rack-2.0.3/lib/rack/runtime.rb:22:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/activesupport-5.1.4/lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/executor.rb:12:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/actionpack-5.1.4/lib/action_dispatch/middleware/static.rb:125:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/rack-2.0.3/lib/rack/sendfile.rb:111:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/rack-cors-1.0.2/lib/rack/cors.rb:97:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/railties-5.1.4/lib/rails/engine.rb:522:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/puma-3.11.0/lib/puma/configuration.rb:225:in `call'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/puma-3.11.0/lib/puma/server.rb:624:in `handle_request'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/puma-3.11.0/lib/puma/server.rb:438:in `process_client'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/puma-3.11.0/lib/puma/server.rb:302:in `block in run'
/Users/Josh/.rvm/gems/ruby-2.3.4/gems/puma-3.11.0/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
ruby-on-rails ruby activerecord rails-activerecord
1个回答
0
投票

我想你的应用程序正在寻找再次加载current_user。尝试删除后尝试将current_user设置为nil。

def destroy
    @user = User.find(params[:id])
   if @user == current_user
    @user.destroy
    @current_user = nil
    render json: {message: "Your account was deleted"}, status: 200
   else
    render json: {message: "You cannot delete this account"}, status: 400
   end
  end
© www.soinside.com 2019 - 2024. All rights reserved.