【问题标题】:as_json call override method with paramsas_json 使用参数调用覆盖方法
【发布时间】:2018-01-23 09:20:14
【问题描述】:

如何在as_json 中调用带有参数的方法?

详情:

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

示例:

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])

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

【问题讨论】:

  • as_json 不允许调用方法。它允许包含某些方法调用的结果

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


【解决方案1】:

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

你需要添加一个不带参数的方法来调用你想要的名字:

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 属性(而不是将其重命名为长名称)但有点麻烦。

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多