0

使用 Ruby 1.9 构建 Rails 3.2 应用程序。我正在尝试编写一个初始化 3 个变量的辅助方法,当我尝试从我的视图中调用已初始化的变量时,我得到一个“未定义的方法”错误。

帮助文件中的方法

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      

然后我尝试像这样调用初始化变量@level3_status

 <%=level3_status (product)%>

不知道我做错了什么任何帮助将不胜感激。

4

1 回答 1

0

你用 ruby​​ 编程多久了?您必须创建类的新实例才能访问外部实例。看看这些基础知识:http ://www.tutorialspoint.com/ruby/ruby_variables.htm

更新

从上面的链接..

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 下?在这个文件中,你应该只添加视图助手。如果我的直觉是正确的,我会解决您的问题,如下所示:

应用程序/帮助者/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

应用程序/视图/your_views_folder/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
于 2013-09-21T16:56:28.457 回答