我想知道是否可以使用类方法修改对象。
例如,users = User.scoped
# 这将选择所有对象
而且,假设我想为每个存在的对象分配一个变量。比方说,我希望他们共享一个值。因此,例如,当我尝试访问时,users.first.my_variable
它会产生我想要的值。
我天真的实现:
def self.set_my_variable(variable_value)
scoped.tap do |obj|
obj.my_variable = variable_value
end
end
所以,理想情况下,当我不想设置这个变量时,我应该像这样调用类方法:users.set_my_variable("hello, stackoverflow")
但是,当我尝试通过集合的任意对象访问变量时,如下所示:
users.first.my_variable
我得到零。比较两者中的 .object_id:obj.object_id
并users.first.object_id
表明它们是不同的。为什么这样 ?我认为它们共享相同的引用(指向相同的对象)
任何修复它的方法(最好不将集合传递给此类方法)?