2014-05-19 46 views
0

我這裏有有麻煩Rails中使用會話未定義,局部變量或方法

class Students::RegistrationsController < Devise::RegistrationsController 

    def after_sign_up_path_for(resource) 
    '/events/new' 
    end 

    def after_inactive_sign_up_path(resource) 
    '/events/new' 
    end 

    def brand 
    brand ||= Brand.find(params[:brand]) 
    session[:brand] = Brand.find(params[:brand]) #not working 
    end 
    helper_method :brand 
end 

有一項登記控制器後,有人註冊,將它們發送到事件/新頁

之前有人去了註冊頁面,他們將要經過一個品牌頁面

=link_to t('slide2.apply_here'), new_student_registration_path(:brand => brand.id),class: "button-component", style: "font-size: 14px; padding: 10px 50px;" 

請注意,品牌標識是越來越通過的link_to通過作爲PARAMS的對照註冊奧勒。我有品牌方法來獲取品牌ID,找到品牌並在註冊頁面的視圖中使用它。

我想要做的事件/新存儲,因此在會話品牌同樣的事情。

我不斷獲取未定義的局部變量或方法品牌。

我有這個在事件新視圖

%h3=brand.name 

我知道會議要短,它應該只是

session[:brand] = params[:brand] 

但後來我得到我的註冊頁面,現在不確定的,它搞亂我的幫手方法。

更新

我只是在我的事件新視圖

.row 
    .span4 
    .accordion#picture_accordion.left 
    =image_tag brand.image_url 
    %h3=brand.name 

回答

1

當你說

brand ||= Brand.find(params[:brand]) 

這好像是說

brand = brand || Brand.find(params[:brand]) 

如果掉了這個尚未定義,此時您將收到「未定義的局部變量或方法」錯誤。

如果將其更改爲一個實例變量,@brand,它應該工作,因爲不確定的實例變量評估爲零。

編輯 - 這是我的「CURRENT_USER」的方法,這聽起來相媲美。

def current_user 
    @current_user ||= (session[:user_id] && User.find_by_id(session[:user_id])) 
end 

這裏發生了什麼是第一次current_user被調用時,它加載使用會話當前用戶[:USER_ID]在被稱爲@current_user一個實例變量保存它。下一次current_user被調用時,在相同的動作,它只是用它保存到實例變量的對象,而不是再次將其裝入從數據庫中。

注意,在這個系統中的控制器和視圖代碼,想知道誰是當前用戶必須撥打current_user@current_user。 @current_user僅由current_user方法用於保存頁面呈現持續時間的值。

+0

我需要更多的說明,我的會話代碼也可以,如果我將其更改爲'@ brand',我是否正確訪問會話? – Jngai1297

+0

您是否將brand_id保存在學生表中?看我的編輯。 –

相關問題