Rails 3 devise_for和STI

时间:2013-05-15 02:07:45

标签: ruby-on-rails-3 devise sti

我有以下型号:

User
Athlete < User
Coach < User

在我的路线中,我有以下内容:

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "registrations" }

我想为每个sign_up路径创建一条路线(即:/ sign_up / coach,/ sign_up / athlete)...我应该创建两个不同的注册控制器,还是有办法做到这一点只有一个注册控制器?

2 个答案:

答案 0 :(得分:1)

您可以使用单个注册控制器执行以下操作:

class UsersController < Devise::RegistrationsController

  private

    def resource_class
      params[:type].present? ? params[:type].classify.constantize : super
    end

end

您还需要做一些其他的调整。无论这是否值得,我想这取决于模型实际上有多相似。

希望它有所帮助!

答案 1 :(得分:0)

如果你为教练和运动员创建单独的控制器会很好:

devise_for :coach, :controllers => { :registrations => "coach_registrations" }
devise_for :athlete, :controllers => { :registrations => "athlete_registrations" }

class CoachRegistrationsController < Devise::RegistrationsController

end

class AthleteRegistrationsController < Devise::RegistrationsController

end

感谢。