[英]Rails + Devise - registration_path is wrong after editing the default routes
在我的个人资料页面中
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %>
在我的路线上
devise_for :users,
:controllers => {
:registrations => "registrations",
:sessions => "sessions",
:invitations => 'invitations'
},
:path => '/',
:path_names => {
:sign_in => 'login',
:sign_out => 'logout',
:sign_up => 'signup'
}
devise_scope :user do
root :to => "registrations#new"
get '/me/profile' => 'registrations#edit', :as => "myprofile"
get "/me/invites" => 'invitations#new', :as => 'myinvites'
end
耙路:
new_user_session GET /login(.:format) {:action=>"new", :controller=>"sessions"}
user_session POST /login(.:format) {:action=>"create", :controller=>"sessions"}
destroy_user_session DELETE /logout(.:format) {:action=>"destroy", :controller=>"sessions"}
cancel_user_registration GET /cancel(.:format) {:action=>"cancel", :controller=>"registrations"}
user_registration POST / {:action=>"create", :controller=>"registrations"}
new_user_registration GET /signup(.:format) {:action=>"new", :controller=>"registrations"}
edit_user_registration GET /edit(.:format) {:action=>"edit", :controller=>"registrations"}
PUT / {:action=>"update", :controller=>"registrations"}
DELETE / {:action=>"destroy", :controller=>"registrations"}
root / {:controller=>"registrations", :action=>"new"}
myprofile GET /me/profile(.:format) {:controller=>"registrations", :action=>"edit"}
现在,当我包含:path => '/'
时,我的编辑用户配置文件页面不再起作用。 单击更新配置文件不会更新我的用户配置文件。
现在,“编辑用户个人资料”表单为action = '/'
(不起作用),而不是以前的action = '/users'
(可行)
在Devise Github Wiki上部分描述了设置自定义Devise路线。
但是,删除映射(在这种情况下为“用户”)并不十分清楚。 描述的:path => ''
也破坏了东西。
因此,如果需要: /sign_in
代替/users/sign_in
, /register
代替/users/register
,等等。
你可以做什么:
为会话和注册创建自定义控制器。 在这些控制器中设置:
class Users::RegistrationsController < Devise::RegistrationsController
prepend_before_filter :set_devise_mapping
private
def set_devise_mapping
request.env["devise.mapping"] ||= Devise.mappings[:user]
end
end
(与Users::SessionsController < Devise::SessionsController
)
接下来,将以下内容添加到您的routes.rb:
devise_for :users,
:skip => [:sessions, :registrations],
:controllers => {
:omniauth_callbacks => 'users/omniauth_callbacks',
:registrations => 'users/registrations',
:passwords => 'users/passwords',
:sessions => 'users/sessions'
},
# Setting empty path gives errors in registration_path.
# So we overwrite them here.
get 'sign_in' => 'users/sessions#new', :as => :new_user_session
post 'sign_in' => 'users/sessions#create', :as => :user_session
delete 'sign_out' => 'users/sessions#destroy', :as => :destroy_user_session
get 'register' => 'users/registrations#new', :as => :new_user_registration
post 'register' => 'users/registrations#create', :as => :user_registration
要同时允许帐户编辑,您应该添加自己的编辑和更新路径:
namespace :users do
resource :registration, only: [:edit, :update], path: ''
end
我相信
...,
:controllers => {
:registrations => "registrations",
:sessions => "sessions",
:invitations => 'invitations'
},
:path => '/',
:path_names => {
:sign_in => 'login',
:sign_out => 'logout',
:sign_up => 'signup'
}
不需要。 您仅需要README.rdoc中所述的 devise_for :users
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.