在jsonapi-resources中创建奇异资源

时间:2016-04-25 17:54:40

标签: ruby-on-rails singleton jsonapi-resources

使用jsonapi-resources gem(和Rails 4),我试图创建一个单一(或单一)资源(不提供标准显示,更新和删除请求的URL上的id),我的情况是当前(登录)用户的个人资料,所以我可以做一个' GET /个人资料'而不是' GET / profiles /:id'。

我已将单一路由添加到config / routes.rb文件中:

jsonapi_resource:个人资料

根据文件https://github.com/cerebris/jsonapi-resources#jsonapi_resource

那么如何修改资源(ProfileResource)以将id映射到current_user(通过上下文)?

现有的演示应用程序没有演示使用单一资源,并且似乎没有(明确地)解决这个问题的任何文档。

2 个答案:

答案 0 :(得分:1)

在您的个人资料资源中,如果密钥是“我”,您可以覆盖self.find_by_key方法以通过存储在上下文中的用户进行实例化。 对于当前用户,您可以点击/profiles/me

def self.find_by_key(key, options = {})
  new(options[:context][:current_user], options[:context]) if key == 'me'
end

答案 1 :(得分:1)

有效! (THKS)

对我而言,关键是

config / routes.rb

jsonapi_resource :profile

并在app / resources / profile_resource.rb

def self.find_by_key(key, options = {})
  model = options[:context][:current_user]
  fail JSONAPI::Exceptions::RecordNotFound.new(key) if model.nil?
  new(model, options[:context])
end

然后点击(GET,PUT,POST,DELETE)' / profile'工作正常。