用于更新JSON中的模型值的Ruby代码

时间:2017-04-24 07:46:28

标签: json ruby

我找不到在ruby代码中合并这两行的方法:

def as_json(options={})
  super(options).merge ({ :id => self.id.upcase }) # upcase id
  super(options).reject { |k, v| v.nil? } # reject nil values
end

如何管理merge中的rejectsuper

编辑:超级(选项)返回的示例:

  

{“id”=>“6ea8db7f-18a8-422d-9510-5b615883ed7c”,“user_id”=> 1,   “contact_id”=> nil,“producer_id”=> nil}

问题是当contact_idproducer_idnil时。

super(options).reject { |_k, v| v.nil? }.merge(id: id.upcase, contact_id: contact_id.upcase, producer_id: producer_id.upcase) 

编辑2:这是有效的,但它非常难看

super(options).merge(id: id.upcase, contact_id: contact_id ? contact_id.upcase : nil, producer_id: producer_id ? producer_id.upcase : nil).reject { |_k, v| v.nil? } 

1 个答案:

答案 0 :(得分:3)

您可以根据需要链接任意数量的方法:

def as_json(options={})
  super(options).reject { |k, v| v.nil? }.merge ({ :id => self.id.upcase })
end

这是您的代码的更传统版本:

def as_json(options = {})
  super(options).reject { |_k, v| v.nil? }.merge(id: id.upcase)
end
  • 在设置参数的默认值时使用空格
  • _k表示块中未使用k
  • {}
  • 中不需要merge
  • 无需self