我找不到在我的 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
如何在super
中管理merge
和reject
?
编辑:super(options) 返回的示例:
{"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? }
最佳答案
您可以根据需要链接任意多个方法:
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
表示 block 中没有使用k
- 在
merge
中不需要 - 不需要
self
{}
关于json - 用于更新 JSON 中的模型值的 Ruby 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43582486/