Ich habe eine API-nur Schienen-Anwendung mit active_model_serializers
0.10. Ich habe ein current_user
Attribut in meinem ApplicationController
und versuche, von meinen Serialisern darauf zuzugreifen, um die gezeigten Daten einzuschränken. Ich kann es tun, indem ich es manuell wie ExerciseSerializer.new(@exercise, scope: current_user)
an den Bereich übergebe, möchte aber eine allgemeine Lösung haben. DieseInclude current_user in ActiveModel :: Serializer
ist mein ApplicationController
:
class ApplicationController < ActionController::API
include Response
include ExceptionHandler
serialization_scope :view_context
# called before every action on controllers
before_action :authorize_request
attr_reader :current_user
def check_access_rights(id)
@current_user.id == id
end
def check_admin_rights
if [email protected]_user.admin
raise(ExceptionHandler::AuthenticationError, Message.unauthorized)
end
end
private
# Check for valid request token and return user
def authorize_request
@current_user = (AuthorizeApiRequest.new(request.headers).call)[:user]
end
end
Dies ist einer meiner Serializer:
class ExerciseSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :image_url, :note
delegate :current_user, :to => :scope
has_many :exercise_details
end
Und das ist, wie ich die Objekte vorstellen:
def json_response(object, status = :ok)
render json: object, status: status
end
Wenn die Serialisierung ich der folgende Fehler:
** Module::DelegationError Exception: ExerciseSerializer#current_user delegated to scope.current_user, but scope is nil:
Wenn ich versuche, die current_user
aus dem Serializer zugreife, erhalte ich folgende Fehlermeldung:
*** NameError Exception: undefined local variable or method `current_user' for #<ExerciseSerializer:0x007ff15cd2e9c0>
Und natürlich Umfang ist nil
.
Irgendwelche Ideen wären hilfreich. Vielen Dank!