为每个新实例实例化(刷新)的类变量

问题描述 投票:1回答:1

我有两个类Categoryorder_item,其中order_item belongs_to是一个类别。

我想将唯一的'category'项目添加到作为'categories'数组并由数组class变量@@ categoriesList]表示的类变量中,每次在实例变量中检测到新类别时。

这是我尝试过的。

class OrderItemsController < ApplicationController

@@categoriesList = []

def create
    @order_item = OrderItem.new(order_item_params)
    if @order_item.save

      @total = @order_item.order.total
      @orderItemCategory = @order_item.category

      if @orderItemCategory.set?
        if !(@@categoriesList.include? @orderItemCategory)
            @total += @orderItemCategory.price
            @@categoriesList.push(@orderItemCategory)
        end
........
........
end

代码说明:

我不想考虑下一个order_item

实例的价格,如果已经考虑了属于同一类别价格的上一个order_item的价格。

例如:

鸡蛋和牛奶都属于Combo-1。所以我只想考虑一次Combo-1的价格,而不是每个order_item实例(即鸡蛋和牛奶)的价格,这会使总金额增加一倍。

我尝试过的事情:

在考虑了价格后,我会推送order_item的类别名称。当创建下一个order_item时,我通过在当前@@ categoriesList

类变量中检查该order_item类别的价格,来检查该价格是否已经记录。

问题:在每个实例中,当我检查类变量@@ categoriesList

时,它将返回一个空数组列表,并且不会显示以前已推送到该数组的记录。

我想要一个类似Java中的静态变量的类,其中该类的每个实例共享相同的变量,而实际上没有刷新每个实例的变量中的数据。

我有两个类Category和order_item,其中order_item属于一个类别。我想将唯一的“类别”项添加到类变量中,该类变量是“类别”的数组并表示为...

ruby-on-rails ruby class-variables
1个回答
0
投票

您几乎不需要类变量,因为它们不是线程安全的或实际上在跨请求的持久性(实际上适用于几乎所有编程语言)。例如,考虑一下如果代码在不同线程中运行或在不同服务器上的负载均衡器后面运行该怎么办。

您可以通过正确建模域来真正完成您的尝试。在结帐系统的情况下,它已经完成了十亿次,并且常见的模式是:

© www.soinside.com 2019 - 2024. All rights reserved.