2012-08-16 149 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