【发布时间】:2020-07-27 08:19:43
【问题描述】:
我有两个类 Category 和 order_item,其中 order_item belongs_to 一个类别。
我想将唯一的“类别”项添加到一个类变量中,该类变量是一个“类别”数组,由数组类变量 @@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 的价格已经被考虑在内.
例如: Egg 和 Milk 都属于 Combo-1。所以我只想考虑一次 Combo-1 的价格,而不是每个 order_item 实例,即鸡蛋和牛奶,这会使总金额翻倍。
我尝试了什么:
在考虑价格后,我推送 order_item 的类别名称。当创建下一个 order_item 时,我通过在当前的 @@categoriesList 类变量中检查该 order_item 的类别的价格是否已被记录。
问题: 在每个实例中,当我检查类变量 @@categoriesList 时,它会返回一个空数组列表,并且不会显示以前推送到该数组的记录。
我想要一个类似于 java 中的静态变量的东西,其中类的每个实例共享同一个变量,而实际上并不为每个实例刷新变量中的数据。
【问题讨论】:
标签: ruby-on-rails ruby class-variables