【发布时间】:2021-03-14 15:39:58
【问题描述】:
我有一个 Rails 模型对象,它的属性映射到数据库中的列。我计算了几个不在数据库列中的临时字段名称和年龄。有没有办法在不改变模型对象的情况下暂时将它们合并到对象中?
class MyModel < ApplicationRecord
end
我尝试使用 attributes.merge。并尝试过:
my_obj = my_obj.attributes.merge({ age: compute_age })
my_obj = my_obj.attributes.merge({ name: compute_name })
但是第二次合并失败,出现 NoMethodError: undefined method `attributes' for #Hash:0x0000000120060010。
看起来当我合并第一个对象时,它使对象成为哈希。所以我需要做
my_obj = my_obj.attributes.merge({ age: compute_age })
my_obj[:name]=compute_name
所有其他属性也作为散列访问。 然而,这对我来说感觉不一致和奇怪!
有没有比使用 attributes.merge 更好的选择,即保留对象? 我想将 attr 添加到模型对象可能更简洁,但这些属性是临时的,不应在外部访问。
【问题讨论】:
-
所以我有一个序列化程序,它在序列化时间之前已经为我创建了临时哈希,但我需要将一个对象传递给它。这就是为什么临时哈希再次感觉有点多余的原因?我想在这种情况下向模型添加 attr_accessor 不会很糟糕?
标签: ruby-on-rails ruby object hash