覆盖设计控制器

时间:2013-11-02 16:58:29

标签: ruby-on-rails devise ruby-on-rails-4

尝试使用Devise 3.0 for Rails 4并考虑集成到现有应用程序中以替换我自己的身份验证系统。

我自己的users_controller在注册过程中与API(Stripe)进行了沟通,如果我使用Devise,我不确定如何包含此功能?

我是否想以某种方式覆盖/扩展Devise控制器?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以在控制器中定义操作并在其中调用super,其中包括相应设计操作的功能。您还可以在其中添加自己的功能。

例如:考虑注册控制器(Registrations Controller

在这里,您可以在自己的注册控制器创建操作中使用设计注册控制器的创建操作代码,并在代码中添加您的功能。

class RegistrationsController < Devise::RegistrationsController
  .
  .
  .

  def create
    build_resource(sign_up_params)

    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        sign_up(resource_name, resource)
        # Here the user successfully signs up, so you can use your stripe API calls here.
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
        expire_session_data_after_sign_in!
        respond_with resource, :location => after_inactive_sign_up_path_for(resource)
      end
    else
      clean_up_passwords resource
      respond_with resource
    end

  end

end 

答案 1 :(得分:0)

对于未来的googlers:可以在带有块的继承控制器的操作中调用super并执行任何操作,而不会覆盖设计代码:

class Users::RegistrationsController < Devise::RegistrationsController
  def create
    super do |user|
      NotificationMailer.user_created(user).deliver
    end
  end
end