2012-09-14 85 views
0

這裏是我的索引方法,它試圖訪問2個不同的模型,即,會議&電子郵件:如何在單個控制器中訪問多個模型,Ruby on Rails?

def index 
    user_session = Session.find_by_user_id(user_id) 

if !user_session.blank? 
    if setting_orig = GlobalSetting.find_by_settings_session_id(user_session.id) 
     @setting = setting_orig.dup 
    end 

else 
    @setting = GlobalSetting.first.dup 
end 

但是,當我嘗試創建這種形式:

<%= form_for(@setting) do |f| %> 
<%= f.text_field :username %> 
<%= f.password_field :password %> 
<%= f.submit "Submit" %> 

我顯示了這個錯誤,未定義的方法'model_name'爲NilClass:Class。如何使其工作,任何建議?

+1

查看堆棧跟蹤中的行號,找出代碼中錯誤來自哪裏。看起來@setting可能是零,因爲form_for必須檢查它才能找出model_name。 – Unixmonkey

+0

我認爲它很困惑,因爲我們正在訪問2個模型,當我評論user_session = Session.find_by_user_id(user_id)這一行,它工作正常 – Raul

回答

2

Unixmonkey有正確的想法,看你的堆棧跟蹤,並找出錯誤來自哪裏。

另外,您的語句邏輯中有一個漏洞。如果user_session不爲空(SOMEONE已登錄),但無法找到setting_session_id等於user_session.id的電子郵件(用戶沒有電子郵件或許?),那麼@setting永遠不會被聲明,因此您將運行進入你的錯誤。

def index 
    user_session = Session.find_by_user_id(user_id) 

    if !user_session.blank? AND setting_orig = GlobalSetting.find_by_settings_session_id(user_session.id) 
    @setting = setting_orig.dup 
    else 
    @setting = GlobalSetting.first.dup 
    end 
end 
+0

對不起,它不是EMail,它應該是GlobalSetting,其中第一行是默認設置和其餘行是用戶自定義設置。 – Raul

+0

並記住,這個工程:user_session =零#user_session = Session.find_by_user_id(user_id) – Raul

+0

對,我剛剛離開你的代碼。即使它是'GlobalSetting'而不是'EMail',問題仍然存在,你的邏輯中有一個洞,'@ setting'永遠不會被聲明。 爲了向你自己證明@setting沒有被聲明是問題,請嘗試註釋掉所有的if語句,然後離開'@setting = GlobalSetting.first.dup'。如果你的代碼不適用於此,那麼還有其他問題 –

相關問題