【问题标题】:How to rename property/attribute of resource with jsonapi-resources ruby gem如何使用 jsonapi-resources ruby​​ gem 重命名资源的属性/属性
【发布时间】:2016-01-07 16:02:12
【问题描述】:

我正在使用jsonapi-resources gem 构建带有rails 的json api。图书馆真的很棒,它做了很多工作。

然而,我们数据库中的某些列名在 API 中显示并没有真正意义。

那么,我的问题是:是否可以重命名资源中的属性/属性?

例子:

假设我有一个具有login 属性的模型用户。

class User < ActiveRecord::Base
  attr_accessor :login
end

我希望 API 中的 login 显示为 username,例如:

class UserResource < JSONAPI::Resource
  attribute :username, map_to: :login
end

谢谢!

【问题讨论】:

  • 为属性设置alias 是否有效?然后,如果您在 JR 中指定 attribute :username,它应该从 :login 中提取值。
  • @Alexander 你能把你的答案放在答案中吗?它有效,并且似乎是其他别名中的最佳选择,因为它也适用于搜索。
  • 当然!很高兴知道它奏效了。

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


【解决方案1】:

为您的:login 属性设置:username alias

class User < ActiveRecord::Base
  attr_accessor :login

  alias_attribute :username, :login
end

然后在JSONAPI::Resources (JR) 中,您可以像这样指定您的username 属性:

class UserResource < JSONAPI::Resource
  attribute :username
end

通过设置别名,您已将username 属性映射到login 属性,因此无论您使用username 还是login,它都会返回相同的值。

【讨论】:

  • 谢谢!这不是 100% 纯解决方案(最可取的是不接触模型,只接触资源),但它仍然是其他别名选项中效果最好的,因为它不会破坏过滤(搜索)功能。谢谢!
【解决方案2】:

我认为您需要使用 alias 或 alias_method。 http://blog.bigbinary.com/2012/01/08/alias-vs-alias-method.html

【讨论】:

  • 感谢您的回复!
【解决方案3】:

通常,更改属性名称或值的最简单方法是重新定义属性。在您的情况下,它将是:

attributes :username

def username
  @model.login
end

在自述文件中:https://github.com/cerebris/jsonapi-resources#formatting

【讨论】:

  • 谢谢!但是,无法正常过滤(搜索)
猜你喜欢
  • 2016-09-14
  • 2015-12-19
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 2016-01-08
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多