Ruby on rails 将用户控制器逻辑移动到模型中

Ruby on rails 将用户控制器逻辑移动到模型中,ruby-on-rails,Ruby On Rails,我正在使用一个名为stripe_connect的gem,它是一个用于stripe的Oauth2解决方案。现在,这段代码运行良好,当涉及到 request.env['omniauth.auth'] 但除此之外,我认为它看起来还不错。但是,我确实希望将其从控制器中移出并放入模型中。然而,我并不完全确定如何进行转换。有人能帮忙吗 class OmniauthCallbacksController < Devise::OmniauthCallbacksController before_ac

我正在使用一个名为stripe_connect的gem,它是一个用于stripe的Oauth2解决方案。现在,这段代码运行良好,当涉及到

request.env['omniauth.auth']
但除此之外,我认为它看起来还不错。但是,我确实希望将其从控制器中移出并放入模型中。然而,我并不完全确定如何进行转换。有人能帮忙吗

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  before_action :authenticate_user!

  def stripe_connect
    @user = current_user
    if @user.update_attributes(
      provider: request.env['omniauth.auth'].provider,
      uid: request.env['omniauth.auth'].uid,
      access_code: request.env['omniauth.auth'].credentials.token,
      publishable_key: request.env['omniauth.auth'].info.stripe_publishable_key
    )
      redirect_to rooms_path
      set_flash_message(:notice, :success, kind: 'Stripe') if is_navigational_format?
    else
      session['devise.stripe_connect_data'] = request.env['omniauth.auth']
      redirect_to new_user_registration_url
    end
  end
end
class OmniAuthCallbackController
您可以将代码的更新属性部分移动到模型,以使控制器代码看起来干净易读:

控制器

将其命名为
@user.update\u oauth\u details(请求)
(或任何其他名称)

型号用户

def update_oauth_details(request)
  self.update_attributes(
    provider: request.env['omniauth.auth'].provider,
    uid: request.env['omniauth.auth'].uid,
    access_code: request.env['omniauth.auth'].credentials.token,
    publishable_key: request.env['omniauth.auth'].info.stripe_publishable_key
    )
end