我找不到在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
中的reject
和super
?
编辑:超级(选项)返回的示例:
{“id”=>“6ea8db7f-18a8-422d-9510-5b615883ed7c”,“user_id”=> 1, “contact_id”=> nil,“producer_id”=> nil}
问题是当contact_id
或producer_id
为nil
时。
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? }
答案 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