在与Doorkeeper结合使用jsonapi-resources gem的0.6.0版本时,我在查看资源中context对象中的当前用户时遇到问题。

我基本上是按照the docs进行操作的,但是我不会尝试在资源的context方法中看到在ApplicationController中设置的fetchable_fields。我确实确认context实际上是在我的ApplicationController中设置的。

这是我所拥有的

应用控制器

class ApplicationController < JSONAPI::ResourceController
  protect_from_forgery with: :null_session

  def context
    {current_user: current_user}
  end
end


控制者

class Api::ItemsController < ApplicationController
  prepend_before_action :doorkeeper_authorize!
end


资源资源

class Api::ItemResource < JSONAPI::Resource
  # attributes

  def fetchable_fields
    # context is always nil here
    if (context[:current_user].guest)
      super - [:field_i_want_private]
    else
      super
    end
  end
end

最佳答案

好吧,使用在jsonapi-resources顶部创建的jsonapi-utils gem –您将编写如下内容:

ApplicationController:

class ApplicationController < JSONAPI::ResourceController
  include JSONAPI::Utils
  protect_from_forgery with: :null_session
end


ItemsController:

class API::ItemsController < ApplicationController
  prepend_before_action :doorkeeper_authorize!
  before_action :load_user

  def index
    jsonapi_render json: @user.items
  end

  private

  def load_user
    @user = User.find(params[:id])
  end
end


无需定义上下文:-)

希望对您有帮助。干杯!

10-07 17:35