2013-02-26 84 views
-1

model_name_ids方法下面是我的控制器代碼錯誤在軌

class ProductComparisonController < ApplicationController 

def product_vote 
    if !session[:category_tracker] 
     @categories = Category.where(:page_id => params[:page_id]).select(:id) 
     session[:category_tracker][email protected] 
     session[:step]=0 
     session[:number_of_categories][email protected] 
    end 

    chosen_products = session[:category_tracker][session[:step]].chosen_product_ids 
    @products = Product.where(:id => chosen_products).all 
    session[:step] = session[:step] + 1 

end 

當我運行它,它完美地運行爲類的第一個實例。但是當step值得到更新並且必須從會話變量中獲取第二個值時,它會給出一個錯誤。

錯誤是:(11號線)

未定義的方法`chosen_product_ids'爲:@new_record:符號

+0

你在哪裏存儲會話?如果這是默認的Cookie會話,請記住,您的空間非常有限。 – 2013-02-26 16:28:24

+0

'session [:category_tracker] [session [:step]]''有什麼? – codeit 2013-02-26 16:30:07

回答

0

您需要的關係轉換爲數字數組在會話中存儲。然後根據當前步驟的ID從數據庫中獲取對象。

class ProductComparisonController < ApplicationController 

    def product_vote 
    if !session[:category_tracker] 
     # No need to use instance variables here. 
     categories = Category.where(:page_id => params[:page_id]).select(:id) 
     # Iterate the categories extracting only the ids. 
     # select(:id) does not do this. 
     session[:category_tracker] = categories.map(&:id) 
     session[:step] = 0 
     session[:number_of_categories] = categories.count 
    end 

    # First fetch the category 
    category = Category.find(session[:category_tracker][session[:step]]) 
    # Then call methods on it 
    chosen_products = category.chosen_product_ids 
    @products = Product.where(:id => chosen_products).all 
    session[:step] += 1 
    end 
end 
+0

非常感謝。我已經明白我在這裏做錯了什麼。 – utsavanand 2013-02-26 18:00:58

+0

另外,我對第一次正確工作的原因(即它正在提取chosen_product_ids)而不是事後(即對其他類別)感到困惑。這是否是因爲Dave Newton所說的默認Cookie會話空間有限? – utsavanand 2013-02-26 18:03:23

+0

這是因爲當你第一次運行信息被保存在內存中時。在其後的每個請求中,它實際上都是從會話存儲中提取的。 – Cluster 2013-02-26 19:09:08

0

要存儲在會話而不是實際的陣列一個ActiveRecord ::關係。

嘗試增加一個。所有你的類別結束取

+0

此外,一旦完成,代碼將在Fixnum上調用'chosen_product_ids',因此在分配'chosen_products'之前,模型也需要加載。 – Cluster 2013-02-26 17:09:15