tutorial rails español ejemplos descargar curso ruby-on-rails ruby-on-rails-3 devise

ruby-on-rails - español - ruby on rails pdf



Establecer el inicio de sesión de Devise para ser página raíz (8)

Algunas de estas soluciones son demasiado complejas. Solo usa tus habilidades de Rails para abofetear a Devise al revés:

Agregue ''get'' ''users/root'', to: ''users#root'' a config / routes.rb.

En UsersController, haga algo como:

def root if user_signed_in? redirect_to root_for_signed_in_user_path (or whatever) else redirect_to new_user_session_path end end

Estoy usando el siguiente código para mis rutas:

devise_for :user, :as => '''', :path_names => { :sign_in => "", :sign_out => "logout", :sign_up => "register" }

Pero cuando estoy desconectado y goto /logout obtengo el siguiente error:

Ninguna ruta coincide con {: action => "new",: controller => "idear / sessions"}

¿Cómo configuro la ruta raíz para estar en :sign_in acción?


Para continuar de las personas que preguntan sobre el error Could not find devise mapping for path "/" hay una solución alternativa.

Descubrirá que hay una pista en sus registros que probablemente diga:

[Devise] Could not find devise mapping for path "/". This may happen for two reasons: 1) You forgot to wrap your route inside the scope block. For example: devise_scope :user do match "/some/route" => "some_devise_controller" end 2) You are testing a Devise controller bypassing the router. If so, you can explicitly tell Devise which mapping to use: @request.env["devise.mapping"] = Devise.mappings[:user]

Así que volví a intentar el enfoque, pero en lugar de envolverlo (como @miccet sugiere) dentro de un bloque de alcance:

devise_scope :user do root to: "devise/sessions#new" end

Esto funcionó bien para mi



Tengo esto para trabajar con @VvDPzZ respuesta. Pero tuve que modificarlo un poco

devise_scope :business_owner do authenticated do root to: ''pages#dashboard'' end unauthenticated do root to: ''devise/sessions#new'', as: ''unauthenticated_root'' end end

Tuve que hacer un anuncio to: en la declaración de la ruta raíz. También eliminé el as: :authenticated_root porque ya tenía algunos lugares en mi aplicación root_path referencia a root_path en los enlaces. Al omitir la parte as: :authenticated_root , no tuve que cambiar ninguno de mis enlaces existentes.


Usando Rails 3.2 y diseñar 3.2.3 Me las arreglo para configurar mi página de inicio " home # index " (controlador # acción) como la página de inicio de sesión haciendo los siguientes cambios.

# 1 Agregó el formulario de inicio de sesión a la página de inicio:

<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> <%= f.input :email %> <%= f.input :password %> <%= f.button :submit %> <% end %>

# 2 Métodos agregados resource_name, resource y devise_mapping para app / heldpers / application_helper.rb :

def resource_name :user end def resource @resource ||= User.new end def devise_mapping @devise_mapping ||= Devise.mappings[:user] end

# 3 Creó una aplicación de controlador de sesión personalizada / controladores / usuarios / sessions_controller.rb :

class Users::SessionsController < Devise::SessionsController protected # This method tell sessions#create method to redirect to home#index when login fails. def auth_options { scope: resource_name, recall: ''home#index'' } end end

# 4 Omita las rutas de sesión y configure el controlador de sesiones personalizado en config / routes.rb :

devise_for :users, path: ''auth'', skip: [:sessions], controllers: { sessions: ''users/sessions'' } as :user do get ''auth/sign_in'' => ''home#index'', as: :new_user_session post ''auth/sign_in'' => ''users/sessions#create'', as: :user_session delete ''auth/sign_out'' => ''users/sessions#destroy'', as: :destroy_user_session end


(Esto fue publicado como una edición sugerida , pero debería haber sido una respuesta propia. No sé si tiene sentido o no. Estimado editor anónimo: no dude en volver a publicar esta respuesta como la suya, y déjeme un comentario así que borraré esta copia).

root :to => redirect("/users/login")


devise_for :users devise_scope :user do authenticated :user do root ''home#index'', as: :authenticated_root end unauthenticated do root ''devise/sessions#new'', as: :unauthenticated_root end end

Justo como este, probado en Rails Rails 4.1.0.rc1.


root :to => "devise/sessions#new"

Necesitaba establecer la raíz de inicio predeterminada. Me sentí como si hubiera intentado esto toda la noche de anoche (antes de publicar la pregunta), pero está funcionando ahora. Si está desconectado, Devise intenta redirigirlo a la ruta raíz que no había definido.