Ruby on rails 在Rails中调用初始化变量时出错

Ruby on rails 在Rails中调用初始化变量时出错,ruby-on-rails,Ruby On Rails,使用Ruby 1.9构建Rails 3.2应用程序。 我试图编写一个帮助器方法来初始化3个变量,当我试图从视图中调用初始化的变量时,我得到一个“undefined method”错误 帮助文件中的方法 module StoreHelper class Status def initialize(product) product_sales = product.line_items.total_product_sale.sum("quantity") #avoid nil class errors

使用Ruby 1.9构建Rails 3.2应用程序。 我试图编写一个帮助器方法来初始化3个变量,当我试图从视图中调用初始化的变量时,我得到一个“undefined method”错误

帮助文件中的方法

module StoreHelper
class Status
def initialize(product)
product_sales = product.line_items.total_product_sale.sum("quantity")
#avoid nil class errors for vol2 and 3. volume 1 can never be nil
if product.volume2.nil?
    product.volume2 = 0
end
if product.volume3.nil?
    product.volume3 = 0
end
 #Promo status logic
if (product_sales >= product.volume2) && (product_sales < product.volume3)
  @level3_status = "Active"
  @level2_status = "On!"
  @level1_status = "On!"
elsif (product_sales >= product.volume3)
   @level3_status = "On!"
   @level2_status = "On!"
   @level1_status = "On!"
else  @level3_status = "Pending"
end 
end      
modulestorehelper
阶级地位
def初始化(产品)
产品销售=产品线项目总数产品销售总额(“数量”)
#避免vol2和Vol3出现零类错误。第一卷永远不能是零
如果product.volume2.nil?
product.volume2=0
结束
如果product.volume3.nil?
product.volume3=0
结束
#促销状态逻辑
if(产品销售>=产品卷2)和&(产品销售<产品卷3)
@级别3\u status=“活动”
@level2_status=“On!”
@level1\u status=“开!”
elsif(产品销售>=产品卷3)
@level3_status=“On!”
@level2_status=“On!”
@level1\u status=“开!”
else@level3\u status=“待定”
结束
结束
然后我尝试调用初始化变量@level3\u status,如下所示

 <%=level3_status (product)%>


我不知道我做错了什么,任何帮助都会很感激的

你用ruby编程多长时间了?必须创建类的新实例才能访问外部实例。看看这些基础知识:

更新

从上面的链接

Ruby实例变量:

实例变量以@开头。未初始化的实例变量的值为nil,并使用-w选项生成警告

下面是一个显示实例变量用法的示例

class Customer
  def initialize(id, name, addr)
    @cust_id=id
    @cust_name=name
    @cust_addr=addr
   end

  def display_details()
    puts "Customer id #@cust_id"
    puts "Customer name #@cust_name"
    puts "Customer address #@cust_addr"
  end
end

# Create Objects
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.display_details()
cust2.display_details()
这就是使用ruby和实例变量的方法。更多详情请参见链接

在你的情况下,我认为你有另一个“错误”,你混淆了一些东西。。你的助手班在哪里?在app/helpers/store_helper.rb下?在这个文件中,您应该只添加视图帮助器。如果我的直觉是正确的,我会像下面这样解决你的问题:

app/helpers/store_helper.rb

module StoreHelper

  def get_level_states(product)
    product_sales = product.line_items.total_product_sale.sum("quantity")
    product.volume2 = 0 if product.volume2.nil?
    product.volume3 = 0 if product.volume3.nil?

    levels = {}
    if (product_sales >= product.volume2) && (product_sales < product.volume3)
      levels[:1] = "On!"
      levels[:2] = "On!"
      levels[:3] = "Active!"
    elsif product_sales >= product.volume3
      levels[:1] = "On!"
      levels[:2] = "On!"
      levels[:3] = "On!"
    else
      levels[:3] = "Pending"
    end

    levels
  end

end
modulestorehelper
def get_级别_状态(产品)
产品销售=产品线项目总数产品销售总额(“数量”)
如果product.volume2.nil,product.volume2=0?
如果product.volume3.nil,product.volume3=0?
级别={}
if(产品销售>=产品卷2)和&(产品销售<产品卷3)
级别[:1]=“打开!”
级别[:2]=“打开!”
级别[:3]=“活动!”
elsif product_sales>=product.volume3
级别[:1]=“打开!”
级别[:2]=“打开!”
级别[:3]=“打开!”
其他的
级别[:3]=“待定”
结束
水平
结束
结束
app/views/your_views\u文件夹/your_view.html.erb

要获取不同的级别状态,请执行以下操作:

<% levels = get_level_states(product) %>

<%= levels[:1] %> # will print the level 1
<%= levels[:2] %> # will print the level 2
<%= levels[:3] %> # will print the level 3

#将打印级别1
#将打印级别2
#将打印级别3

如果这是一个愚蠢的问题,很抱歉,我只做过编程,Ruby或任何其他语言,大约3个月了。不确定你所说的创建类的新实例是什么意思,我在linke中没有看到任何关于这一点的内容。你能进一步解释吗?我更新了我的答案,如果我的直觉不正确,请告诉我你真正想要的是什么:)…你的假设很准确,你的解决方案也很有帮助。谢谢