Я использую сериализаторы Active Model.
Я пытаюсь получить доступ к @current_user
, который определен внутри ApplicationController
, например:
class ApplicationController < ActionController::API
before_action :authenticate_request
private
def authenticate_request
auth_header = request.headers['Authorization']
regex = /^Bearer /
auth_header = auth_header.gsub(regex, '') if auth_header
begin
@current_user = AccessToken.get_user_from_token(auth_header)
rescue JWT::ExpiredSignature
return render json: {error: "Token expired"}, status: 401
end
render json: { error: 'Not Authorized' }, status: 401 unless @current_user
end
end
Я могу использовать @current_user
где угодно, кроме как внутри моего ProjectSerializer
, который выглядит следующим образом:
class V1::ProjectSerializer < ActiveModel::Serializer
attributes(:id, :name, :key, :type, :category, :created_at)
attribute :is_favorited
belongs_to :user, key: :lead
def is_favorited
if object.favorited_by.where(user_id: @current_user.id).present?
return true
else
return false
end
end
end
ProjectSerializer
находится в моей app/
структуре дерева проекта:
app/
serializers/
v1/
project_serializer.rb
Я получаю ошибка при попытке доступа к @current_user
:
NoMethodError in V1::UsersController#get_current_user
undefined method `id' for nil:NilClass
Это происходит, когда я вызываю функцию из UserController
, которая затем переходит к UserSerializer
, а затем у этого сериализатора есть поле has_many :projects
, которое вызывает ProjectSerializer
.