0

我想知道是否可以使用类方法修改对象。

例如,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_idusers.first.object_id表明它们是不同的。为什么这样 ?我认为它们共享相同的引用(指向相同的对象)

任何修复它的方法(最好不将集合传递给此类方法)?

4

1 回答 1

0

您需要将对象保存到数据库:

   obj.my_variable = variable_value
   obj.save
于 2013-08-14T13:38:24.787 回答