【问题标题】:How to modify the response of as_json in ruby on rails?如何在 ruby​​ on rails 中修改 as_json 的响应?
【发布时间】:2017-09-06 20:08:48
【问题描述】:

我有一个名为 Event 的模型,它又与 EventType 有一个关联

event = Event.last

event.as_json(include: {event_type: {only: :name}}, only: :event_type)

这是给我输出

{ :event_type=> { "name"=>"Chat" } }

但我想要的回应是

{ :event_type => "Chat" }

我怎样才能做到这一点?

【问题讨论】:

  • 你可以重新定义as_json或者创建你自己的实例方法

标签: ruby-on-rails json ruby-on-rails-3


【解决方案1】:

您可以使用:methods 键在事件上创建一个实例方法并将其包含在序列化响应中(请参阅as_json 的文档)。

但您不想创建event_type 方法,因为关联 has_one 已为您创建了一个。也许你可以做event_method_name?如果您必须得到您想要的确切响应,那么 JBuilder 或 Active Model Serializers 之类的东西似乎可以让您更好地控制输出。

【讨论】:

    【解决方案2】:

    您可以在 event.rb 中执行此操作。

    def as_json
      options =  {event_type: event_type[:name]}
      super
    end
    

    您也可以考虑创建和调用一个新方法,以避免在其他地方需要完整对象时覆盖该方法。

    def event_type_as_json
      {event_type: event_type[:name]}.as_json
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2011-12-01
      相关资源
      最近更新 更多