更新 rails 中的 class 个变量

updating class variables in rails

我有一个名为 @@customers 的 class 变量,我想通过一种方法不断更新它。

我在模型的顶部初始化变量(作为一个空数组)。然后在调用方法 update_customers 时更新它:

class Customer
   @@customers = []

   def update_customers(new_customer)
      @@customers << new_customer
   end
end

我担心@@customers 被重新初始化为 [] 并丢失数据。这样的重新初始化会发生吗?什么时候发生?

没有;当从新的 Customer 对象调用 update_customers 时,@@customers 不会重新初始化为 []。这就是 class 变量的工作原理。

有关 class 变量的深入处理,请参阅 http://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/45-more-classes/lessons/113-class-variables

正如那里提到的:

There aren't very many cases that you would need to use class variables.`

class Customer
   @@customers = []

   def self.update_customers(new_customer)
      @@customers << new_customer
   end
end

Class 变量是静态的。它们只被初始化一次。 如果您将 update_customers 声明为 class 方法就好了 你可以像

这样调用方法
cust1 = Customer.new
Customer.update_customers cust1