【发布时间】:2023-03-30 19:51:01
【问题描述】:
我有一个将@lead 与一些默认值合并的模型,如下所示:
DEFAULTS = {
inflation: 4.224 / 100,
usage: 12_000,
cost: 3250
}.freeze
@lead.attributes.symbolize_keys.reverse_merge!(DEFAULTS)
这一半有效,但如果 @lead 用法为 nil,则不会使用 DEFAULT 用法。如果@lead 的值为nil,我如何将DEFAULT 值应用于@lead only?
出于多种原因,我不想在迁移中存储默认值,所以它已经过时了。
谢谢。
【问题讨论】:
-
你看过
Hash#merge的块版本吗?例如@lead.attributes.symbolize_keys.merge(DEFAULTS) { |key, old_val, new_val| old_val.nil? ? new_val : old_val }btwreverse_merge!和!(砰)不会有任何影响,因为attributes.symbolize_keys创建的链我相信是副本而不是参考 -
效果很好,谢谢!
-
我会把这个块写成
{ |_, old_val, new_val| old_val || new_val }
标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5