【问题标题】:Rails API JSON response, change name of methodRails API JSON 响应,更改方法名称
【发布时间】:2018-10-18 17:57:02
【问题描述】:

我有一个 Rails 5 API,它用它的一些方法将一个对象呈现为 JSON。

render json: { rides: @rides }.to_json( :methods => [ :is_preferred ]), status: 200

所以这会返回类似:

{
 id: 123,
 is_preferred: true
}

但我想更改引用 is_preferred 方法的属性名称。

我想要的输出id:

{
 id: 123,
 preferred: true
}

我试过了

render json: { rides: @rides }.to_json( :methods => [ preferred: :is_preferred ]), status: 200

但这不起作用。最简单的方法是更改​​模型中的方法名称,但在这种情况下这是不可能的。

有什么方法可以在响应中操纵名称吗?

【问题讨论】:

  • 你说不能改方法名,但是可以创建别名吗? alias_method :preferred, :is_preferred 在模型上。
  • No.. 使用 API 的应用程序(我无法更改)需要首选属性。但在我的模型中,我有一个首选方法已经在做其他事情,所以我无法创建别名。我知道,这是一团糟,但我知道我需要一些解决方法,直到我可以更改应用程序......
  • 但是谢谢,我最终更改了我的 API 中的首选方法,因此它可以免费用作我的 JSON 响应中的方法...

标签: ruby-on-rails rails-api


【解决方案1】:

您可以尝试使用ActiveModel::Serializer,然后您可以根据需要定义属性键

class RideSerializer < ActiveModel::Serializer
  attribute :preferred, key: :is_preferred
end

或使用方法检索属性值

class RideSerializer < ActiveModel::Serializer
  attribute :is_preferred

  def is_preferred
    object.preferred
  end
end

使用序列化程序有很多好处,如果您想创建自定义响应,它非常强大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2021-06-03
    • 2015-12-26
    • 2012-03-07
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多