我正在尝试在我的Rails应用程序中使用自定义路由(Ruby 1.9.2 with Rails 3)。
这是我的config / routes.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
但是在/ login或/ register上提交表单会转到users / sign_in 和users / sign_up。如何防止这种情况发生。或者甚至更好地确保默认情况下对users / sign_in等的所有请求都转到相关路由而不是Devise生成的默认路由。
另外,如何将登录表单部分包含在任何控制器中?这样我可以在主页上设置登录页面(主页#index)而不是用户/ sign_in?
我在Mac OSX Snow Leopard的Ruby 1.9.2上使用Devise 1.1.3和Rails 3。
谢谢!
答案 0 :(得分:76)
使用Devise 1.1.3,以下内容应该有效
devise_for :user, :path => '', :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }
由于:path
参数为空字符串,因此它创建的路由不会附加“/ user / ...”。 :pathnames
哈希将根据您的喜好来命名路由。 Devise将在内部使用这些路由,因此提交到/ login将按您的意愿工作,而不是将您带到/ user / log_in
要在首页添加登录表单,请在Devise Wiki上获取信息: http://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app
或者做这样的事情:
<%= form_tag new_user_session_path do %>
<%= text_field_tag 'user[email]' %>
<%= password_field_tag 'user[password]' %>
<%= submit_tag 'Login' %>
答案 1 :(得分:5)
以下对我有用:
devise_for :users do
get "/login" => "devise/sessions#new"
get "/register" => "devise/registrations#new"
end
答案 2 :(得分:3)
你只需要不要把你的特殊路线放在devise_for块
中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
现在/登录有效。 / users / sign_in。
答案 3 :(得分:1)
我创建了自己的auth控制器并将设计会话控制器路由到我的控制器
devise_for :users,
:controllers => {
:sessions => 'auth' },
:path => '/',
:path_names => {
:sign_in => 'login',
:sign_out => 'logout' }
此代码将添加/ login和/ logout urls。
有关此内容的更多信息,请参阅源代码http://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb
答案 4 :(得分:1)
配置:
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' }
路线:
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
答案 5 :(得分:0)
在routes.rb文件的顶部使用此文件
map.connect "users/:action", :controller => 'users', :action => /[a-z]+/i
在索引文件所在的位置使用它。如果它在您的用户模型上,请使用上述内容或相应更改