如何在Rails应用程序中使用通过gem dev设计的本地视图?

时间:2019-05-27 12:41:44

标签: ruby-on-rails oauth devise

我正在使用gem 'devise'在Rails中遵循oauth google指南。 一切都很好,但是现在我无法更改带有视图的图形, 我意识到我正在使用的控制器将其方法重定向到不在我的应用程序中但位于其他路径(设计gem)中的其他控制器和其他视图。 如何重定向应用程序中的所有内容?

解释一下,这是命令rake routes的结果的一部分:

Prefix Verb     URI Pattern                                                                              Controller#Action
                 new_user_session GET      /users/sign_in(.:format)                                                                 devise/sessions#new
                     user_session POST     /users/sign_in(.:format)                                                                 devise/sessions#create
             destroy_user_session DELETE   /users/sign_out(.:format)                                                                devise/sessions#destroy 

控制器动作映射到不在我的应用中但位于路径中的devise / session控制器上

 ".rvm/gems/ruby-2.6.1/gems/devise-4.6.2/app/controller..."

以便将目录中的视图称为

".rvm/gems/ruby-2.6.1/gems/devise-4.6.2/app/views..."

但是我希望控制器使用我的视图。

这是routes.rb文件:

Rails.application.routes.draw do

  devise_for :users, :controllers => { :omniauth_callbacks =>  "users/omniauth_callbacks" }
  resources :homepage, only: [:index]
  resources :schedules, only: [:index, :edit]
  resources :notes, only: [:index, :edit]
  resources :accounts, only: [:index, :edit]

  root :to => 'homepage#index'

end

这是我创建的唯一控制器:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def google_oauth2
    @user = User.from_omniauth(request.env["omniauth.auth"])

    if @user.persisted?
      sign_in @user, :event => :authentication #this will throw if @user is not activated
      set_flash_message(:notice, :success, :kind => "Google") if is_navigational_format?
    else
      session["devise.google_data"] = request.env["omniauth.auth"]
    end
    redirect_to '/'
  end
end

1 个答案:

答案 0 :(得分:1)

Devise允许覆盖视图和控制器。通常,通过添加诸如app/views/devise/sessions/new.html.erb之类的文件来覆盖视图就足够了,有一个生成器可以将默认视图复制到您的应用中:

rails generate devise:views

有关更多详细信息,请参见devise的README