Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails类方法作用域对象引用_Ruby On Rails_Ruby_Class_Metaprogramming_Class Method - Fatal编程技术网

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?这很奇怪。没有比这更简单的了吗?我应该清楚地说明“我的变量”是虚拟的。它用于内部用途。