Ruby / Rails: почему рендер json: {hello: 'world'} попадает в мою базу данных? - PullRequest
0 голосов
/ 11 марта 2019

У меня есть действие:

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

Это по какой-то причине вызывает мою функцию current_user , определенную в моем контроллере приложения.

Сначала я подумал, что это было предыдущее действие, которое вызывало мою current_user функцию (отсюда _process_action_callbacks).Но после снятия всех моих предыдущих действий звонок остался.Два предыдущих действия являются частью рельсов:

:clean_temp_files
:set_turbolinks_location_header_from_session

Я использовал caller , чтобы увидеть, откуда вызывался мой метод.Вот трассировка стека (и объявление метода):

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

enter image description here

Как вы можете видеть, функция current_user вызывается методом serialization_scope вкласс сериализации.Как мне предотвратить вызов функции current_user ?

1 Ответ

1 голос
/ 11 марта 2019

Ваш тег указывает, что вы используете active-model-serializers.По умолчанию current_user является областью действия.Чтобы настроить область, определенную в приложении-контроллере, вы можете сделать что-то вроде

class ApplicationController < ActionController::Base
  serialization_scope :current_admin
end

В приведенном выше примере область будет изменена с current_user (по умолчанию) на current_admin.

В вашем случае вы, вероятно, просто хотите установить область действия в вашем контроллере (я предполагаю, что она называется SomeController;)), которую вы можете написать

class SomeController < ApplicationController
  serialization_scope nil 

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

end

См. Для полной документации: https://github.com/rails-api/active_model_serializers/tree/0-9-stable#customizing-scope

...