ruby-on-rails ruby routing devise partials

ruby on rails - Diseñe rutas personalizadas y páginas de inicio de sesión



ruby-on-rails routing (6)

Estoy tratando de hacer que Custom Routes funcione en mi aplicación Rails (Ruby 1.9.2 con Rails 3).

Este es mi archivo config / route.rb

match ''/dashboard'' => ''home#dashboard'', :as => ''user_root'' devise_for :user do get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations end

Pero enviar el formulario en / login o / register va a los usuarios / sign_in y users / sign_up. ¿Cómo evito que esto suceda? O mejor aún, asegúrese de que, de forma predeterminada, todas las solicitudes de usuarios / sign_in, etc., vayan a las rutas relevantes y no a las rutas predeterminadas generadas por Devise.

Además, ¿cómo puedo hacer que el formulario de inicio de sesión sea parcial para incluirlo en cualquier controlador? ¿Para que pueda tener la página de inicio de sesión en la página de inicio (índice # de inicio) y no en usuarios / inicio de sesión?

Estoy usando Devise 1.1.3 con Rails 3 en Ruby 1.9.2, en Mac OSX Snow Leopard.

¡Gracias!


Con Devise 1.1.3 debería funcionar lo siguiente

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

Las rutas que crea no se agregarán con "/ user / ..." porque el parámetro :path es una cadena vacía. El hash :pathnames se encargará de nombrar las rutas como desee. Devise utilizará estas rutas internamente, de modo que enviar a / login funcionará como desee y no lo llevará a / user / log_in

Para agregar un formulario de inicio de sesión a su página principal, hay información en Devise Wiki: http://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

O haz algo como esto:

<%= form_tag new_user_session_path do %> <%= text_field_tag ''user[email]'' %> <%= password_field_tag ''user[password]'' %> <%= submit_tag ''Login'' %>


Config:

devise_scope :user do get ''profile/edit'' => ''devise/registrations#edit'', :as => :edit_user_registration get ''profile/cancel'' => ''devise/registrations#cancel'', :as => :cancel_user_registration end devise_for :users, :path => '''', :path_names => { :sign_in => ''login'', :sign_out => ''logout'', :sign_up => '''', :registration => ''register'', :edit => ''edit'', :cancel => ''cancel'', :confirmation => ''verification'' }

Rutas:

edit_user_registration GET /profile/edit(.:format) devise/registrations#edit cancel_user_registration GET /profile/cancel(.:format) devise/registrations#cancel new_user_session GET /login(.:format) devise/sessions#new user_session POST /login(.:format) devise/sessions#create destroy_user_session DELETE /logout(.:format) devise/sessions#destroy user_password POST /password(.:format) devise/passwords#create new_user_password GET /password/new(.:format) devise/passwords#new edit_user_password GET /password/edit(.:format) devise/passwords#edit PATCH /password(.:format) devise/passwords#update PUT /password(.:format) devise/passwords#update GET /register/cancel(.:format) registrations#cancel user_registration POST /register(.:format) registrations#create new_user_registration GET /register(.:format) registrations#new GET /register/edit(.:format) registrations#edit PATCH /register(.:format) registrations#update PUT /register(.:format) registrations#update DELETE /register(.:format) registrations#destroy


Creé mi propio controlador de autenticación y enruté el controlador de sesiones de dispositivos a mi controlador

devise_for :users, :controllers => { :sessions => ''auth'' }, :path => ''/'', :path_names => { :sign_in => ''login'', :sign_out => ''logout'' }

Este código agregará las URL de / login y / logout.

Más sobre esto puede encontrar en el código fuente http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb


Lo siguiente me funcionó:

devise_for :users do get "/login" => "devise/sessions#new" get "/register" => "devise/registrations#new" end


Solo necesita no poner su ruta especial en el bloque de diseño

match ''/dashboard'' => ''home#dashboard'', :as => ''user_root'' get "/login", :to => "devise/sessions#new" # Add a custom sign in route for user sign in get "/logout", :to => "devise/sessions#destroy" # Add a custom sing out route for user sign out get "/register", :to => "devise/registrations#new" # Add a Custom Route for Registrations devise_for :user

Ahora / login funciona. / users / sign_in también.


Use esto en la parte superior de su archivo route.rb

map.connect "users/:action", :controller => ''users'', :action => /[a-z]+/i

Usa esto en donde está tu archivo de índice. Si está en su modelo de usuario, use lo anterior o cambie en consecuencia