2013-03-05 227 views
1

我有一個Rails應用程序。我的所有控制器都繼承自ApplicationController::Base繼承的BaseController這是爲了將我的部分組織到單獨的名稱空間中。它效果很好。Ruby中的多重繼承...繼承自多個控制器類。

這是問題所在。

我試圖使用Devise gem,但Devise::SessionsController找不到我的分支,它們存儲在名爲Base的文件夾中。我的解決方案是創建一個從Devise::SessionsController繼承了這樣的本地控制器:

module Account 
    class SessionsController < Devise::SessionsController 
    end 
end 

的問題是,這個地方SessionsController仍然需要從我BaseController繼承,因此它可以找到我的諧音。合理?

BaseController代碼:

module Account 
    class BaseController < ApplicationController 
    end 
end 

的ApplicationController代碼:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

end 

我一直在閱讀有關的混入,但不能看我怎麼可以用混入來解決這個問題,因爲我不沒有任何方法可以從班級中導入...

+0

'無法找到我的partials' => http://api.rubyonrails.org/classes/AbstractController/ViewPaths/ClassMethods.html#method-i-prepend_view_path – apneadiving 2013-03-05 16:00:13

+0

你可以舉一個我將如何使用這個例子? – Arel 2013-03-05 16:13:48

+0

def prepend_view_path(path) self._view_paths = ActionView :: PathSet.new(Array(path)+ view_paths) end這是繼承自Devise :: SessionsController的控制器嗎? – Arel 2013-03-05 16:15:13

回答

0

解決方法是簡單地使部分路徑更明確。所以在我的例子,在我的應用程序佈局文件,我改變了,從這個局部路線:

<%= render "menu" %> 

這樣:

<%= render "account/base/menu" %> 

這工作,因爲軌道會在正規的地方的部分,但可找不到它並拋出錯誤。在將部分內容放入HTML中時,指定部分的確切位置可以解決Rails或任何寶石不知道部分的位置的問題。