Как использовать локальные представления, созданные с помощью gem devise в приложении rails? - PullRequest
0 голосов
/ 27 мая 2019

Я следую инструкциям для oauth google, используя gem 'devise' в рельсах. Все в порядке, но теперь, когда я не могу изменить графику с представлениями, Я понял, что контроллер, который я использую, перенаправляет свой метод на другие контроллеры и другие представления, которых нет в моем приложении, но которые находятся на другом пути (разработка 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 Ответ

1 голос
/ 27 мая 2019

Devise позволяет переопределять виды и контроллеры.Обычно достаточно переопределить представления, добавив такие файлы, как app/views/devise/sessions/new.html.erb, есть генератор для копирования представлений по умолчанию в ваше приложение:

rails generate devise:views

Подробнее см. В devise's README .

...