as_json用params调用覆盖方法

时间:2018-01-23 09:20:14

标签: ruby-on-rails json active-model-serializers

如何在as_json内调用params方法?

详细信息:

我正在使用as_json,它允许我调用方法,但是所有方法都应该没有参数,我如何使用它来调用带有params的方法?

示例:

Person对象的方法name如下:

def name long=false
  return long == true ? self.long_name : self.attributes["name"]
end 

我有person_object,如何调用person_object.as_json(only: [:id, :name])

当我调用方法long=true时,如何发送参数name

1 个答案:

答案 0 :(得分:0)

简而言之,我认为你不能。

您需要添加一个没有参数的方法,而这个方法可以根据您的需要调用名称:

def long_name
  name(true)
end

然后执行person_object.as_json(only: [:id, :long_name], methods: :long_name)

或者自己修改as_json的回复:

person_object.as_json(only: :id).merge(name: person_object.name(true))

第二个选项具有您想要的name属性(而不是将其重命名为长名称),但有点麻烦。