简体   繁体   中英

Ruby/Rails: Why is render json: {hello: 'world'} hitting my database?

I have an action:

  def test
    _process_action_callbacks.map { |c| pp c.filter }
    render json: {hello: 'world'}
  end

That for some reason is calling my current_user function defined in my application controller.

At first I thought it was a before action that was calling my current_user function (hence _process_action_callbacks). But after stripping away all of my before actions the call remained. The only two before actions are part of rails:

:clean_temp_files
:set_turbolinks_location_header_from_session

I used caller to see where my method was getting called from. Here's the stacktrace (and method declaration):

def current_user
    pp caller
    # get the current user from the db.
end

在此处输入图片说明

As you can see, the current_user function is being called by the serialization_scope method in the serialization class. How do I prevent it from calling my current_user function?

Your tag indicates you are using active-model-serializers . By default current_user is the scope. To customize the scope, defined in the application-controller, you can do something like

class ApplicationController < ActionController::Base
  serialization_scope :current_admin
end

The above example will change the scope from current_user (the default) to current_admin .

In your case, you probably just want to set the scope in your controller (I assume it is called SomeController ;) ) you can write

class SomeController < ApplicationController
  serialization_scope nil 

  def test 
    render json: {hello: 'world'} 
  end 

end

See for complete documentation: https://github.com/rails-api/active_model_serializers/tree/0-9-stable#customizing-scope

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM