ruby-on-rails – 访问Active_model_serializers中的doorkeeper_token(或current_user)

我正在研究用
RocketPants制作的Rails API.对于JSON序列化,我使用
active_model_serializers,对于OAuth –
Doorkeeper.

问题是在UserSerializer类中访问current_user帮助器方法< ::加载ActiveModel串行.错误:

NameError (undefined local variable or method `request' for #<UserSerializer:0xb5892118>)

current_user helper使用此代码段:

User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token

和doorkeeper_token是:

def doorkeeper_token
    methods = Doorkeeper.configuration.access_token_methods
    @token ||= OAuth::Token.authenticate request, *methods
end

所以我发现,在Serializer中没有可访问的请求对象.我怎样才能访问它?或者是否应该有其他方法来实现current_user?

提前致谢

最佳答案 好的,所以正确的答案是使用范围对象,包含在active-model-serializers中.但是有一些问题:

如果我只是尝试访问Serializer中的范围 – 它是零.我试图通过serialization_scope:current_user直接定义它并且没有方法错误,因为这样的方法没有被包括…

然后我已经包含了所需的模块:

class Api::V1::BaseController < RocketPants::Base
    include ActionController::Serialization
    ............

并且有奇怪的行为:它现在抱怨不能在Nil上使用’merge’.深入研究gem的代码我发现了函数

def default_serializer_options
  {
    :url_options => url_options,
    :root        => false
  }
end

,它在ActionController :: Serialization中被覆盖,并且在那里是空函数,所以这就是我得到零的点.

我不得不改变那个函数来返回超级 – 现在它没有抱怨错误,但是然后仍然没有范围而是范围.我设法修复了包括:scope => default_serializer_options中的serialization_scope.现在我可以按预期访问范围对象了.

仍然不知道,为什么这是一个需要奇怪修补的漫长道路,而我不能谷歌任何这种情况.

如果有人能为我清除这个,请这样做=)

点赞