设定的路线名称,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

+0

'找不到设计映射路径 “/遗忘”。这可能发生的原因有两个:1)您忘记将您的路线包裹在范围区块内。例如:devise_scope:user do“/ some/route”=>“some_devise_controller”end 2)您正在测试绕过路由器的Devise控制器。如果是这样,你可以明确告诉Devise使用哪个映射:@ request.env [“devise.mapping”] = Devise.mappings [:user]' – gdfgdfg