设定的路线名称,GET PUT,PATCH,导轨5
问题描述:
我使用Devise
并更改其默认路由是这样的:设定的路线名称,GET PUT,PATCH,导轨5
devise_for :users, :path => '',skip: [:sessions]
as :user do
get '/forgotten' => 'users/passwords#new', as: :password
post '/forgotten' => 'users/passwords#create'
put '/forgotten' => 'users/passwords#update'
get '/password/edit' => 'users/passwords#edit'
end
生成的URL(形式action属性)为new.html.erb
(查看发送电子邮件与新的密码指示)是/forgotten.user
,这是不正确的。正确的URL是/forgotten
,它与不同的HTTP动词GET/POST/PUT一起使用。 重设密码形式(new.html.erb):
<%= form_for(resource, as: resource_name,
url: password_path(resource_name), html: { method: :post})
没有我的定制路由与rake routes
,我看到这些路线:
USER_PASSWORD | PATCH | /password(.:format)|用户/密码#更新
PUT | /password(.:format)|用户/密码#更新
发帖| /password(.:format)|用户/密码#创建
如何使此路由自定义并用于不同的HTTP动词?
答
尝试删除as :user do
get '/forgotten' => 'users/passwords#new', as: :password
post '/forgotten' => 'users/passwords#create'
put '/forgotten' => 'users/passwords#update'
get '/password/edit' => 'users/passwords#edit'
如果您需要的URL像/user/forgotten
使用scope 'user' do
'找不到设计映射路径 “/遗忘”。这可能发生的原因有两个:1)您忘记将您的路线包裹在范围区块内。例如:devise_scope:user do“/ some/route”=>“some_devise_controller”end 2)您正在测试绕过路由器的Devise控制器。如果是这样,你可以明确告诉Devise使用哪个映射:@ request.env [“devise.mapping”] = Devise.mappings [:user]' – gdfgdfg