如何在rails上修改ruby中as_json的响应?

时间:2017-09-06 20:08:48

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

我有一个名为Event的模型,后者又与EventType

有一个关联
event = Event.last

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

这给了我输出

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

但我想要的回应是

{ :event_type => "Chat" }

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以在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