Ruby on rails RubyonRails类方法作用域对象引用
我想知道是否可以使用类方法修改对象 例如,Ruby on rails RubyonRails类方法作用域对象引用,ruby-on-rails,ruby,class,metaprogramming,class-method,Ruby On Rails,Ruby,Class,Metaprogramming,Class Method,我想知道是否可以使用类方法修改对象 例如,users=User.scoped#这将选择所有对象 假设,我想为每个对象分配一个变量。比方说,我希望它们共享一个值。因此,当我尝试访问,例如,users.first.my_变量时,它将生成我想要的值 我天真的实现: def self.set_my_variable(variable_value) scoped.tap do |obj| obj.my_variable = variable_value end end
users=User.scoped
#这将选择所有对象
假设,我想为每个对象分配一个变量。比方说,我希望它们共享一个值。因此,当我尝试访问,例如,users.first.my_变量
时,它将生成我想要的值
我天真的实现:
def self.set_my_variable(variable_value)
scoped.tap do |obj|
obj.my_variable = variable_value
end
end
因此,理想情况下,当我不想设置这个变量时,我应该像这样调用class方法:users.set\u我的变量(“hello,stackoverflow”)
但是,当我尝试通过集合的任意对象访问变量时,如下所示:
users.first.my_变量
我得到零。比较:obj.object\u id
和用户中的.object\u id。首先.object\u id
表明它们是不同的。为什么会这样?我认为它们共享相同的引用(指向相同的对象)
有没有办法修复它(最好不要将集合传递给此类方法)?您需要将对象保存到数据库:
obj.my_variable = variable_value
obj.save
只是为了澄清-您使用Rails 3.2,对吗?是的。即使在更新“虚拟”属性(变量)时,我也使用Rails 3.2.12?这很奇怪。没有比这更简单的了吗?我应该清楚地说明“我的变量”是虚拟的。它用于内部用途。