2013-09-21 37 views
0

使用Ruby 1.9構建Rails 3.2應用程序。 我想寫一個幫助器方法,初始化3個變量,當我嘗試從我的視圖調用初始化變量時,我得到一個「未定義的方法」錯誤。在Rails中調用初始化變量時出錯

方法幫助程序文件

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)%> 

不知道我做錯了任何幫助,將不勝感激。

回答

0

你用ruby編程多久了?您必須創建一個新的類實例才能訪問外部實例。看看這些基本知識:http://www.tutorialspoint.com/ruby/ruby_variables.htm

UPDATE

從上面的鏈接..

Ruby的實例變量:

實例變量開始@。未初始化的實例變量的值爲零,並使用-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 
+0

對不起,如果這是一個愚蠢的問題,我只有編程,Ruby或任何其他語言的事情,現在約3個月。不知道你的意思是通過創建一個新的類的實例,我沒有看到任何關於linke的東西。你能進一步解釋嗎? – Renegade

+0

我更新了我的答案,讓我知道如果我不正確,我的直覺你真的想要什麼:) – Mattherick

+0

你的假設是現貨,你的解決方案幫助。謝謝! – Renegade