2012-08-16 142 views
0

在不共享公共基礎(ApplicationController)類的控制器之間共享通用方法的最佳做法是什麼?控制器之間的共享方法

例如,

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def open_id 
    *** some code goes here *** 
    self.current_organization = organization 
    end 
end 

class ApplicationController < ActionController::Base 
    def current_organization=(organization) 
    session[:current_organization] = organization 
    end 
end 

現在何處current_organization=方法應被放置成使得它可以在兩個控制器中使用,其中它們不共享共同的基類?

我想在模塊中包裝這樣的通用和相關的方法,並將它放在lib中。這是常見的做法嗎?

回答

3

我會建議看看Devise的源代碼。

在omniauth_callbacks_controller.rb中,我們可以看到所討論的控制器是從ApplicationController繼承的。

我喜歡閱讀寶石源代碼的一種方式。

[email protected]:~/7vals$ bundle show devise 
/home/sohaib/.rvm/gems/[email protected]/gems/devise-1.4.9 
[email protected]:~/7vals$ vim /home/sohaib/.rvm/gems/[email protected]/gems/devise-1.4.9 

因此應用程序控制器中的方法應該是可訪問的。但是,如果方法不應該屬於應用程序控制器,即可以在大量方法中共享,那麼您建議製作單獨模塊的想法正是我所要做的。

+0

謝謝。我可以訪問'Users :: OmniauthCallbacksController'中'ApplicationController'中定義的方法 – 2012-08-16 07:03:23