【问题标题】:Set route name for POST, GET PUT, PATCH, Rails 5为 POST、GET PUT、PATCH、Rails 5 设置路由名称
【发布时间】:2018-03-27 08:39:55
【问题描述】:

我正在使用Devise 并像这样更改其默认路由:

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

new.html.erb(用于发送带有新密码说明的电子邮件的视图)的生成 URL(表单操作属性)是 /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 自定义路由,我会看到这些路由:

用户密码 |补丁 | /密码(.:格式) |用户/密码#update

放 | /密码(.:格式) |用户/密码#update

发布 | /密码(.:格式) |用户/密码#create

如何自定义此路由并用于不同的 HTTP 动词?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 devise


    【解决方案1】:

    尝试删除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'
    

    如果您需要像/user/forgotten 这样的网址,请使用scope 'user' do

    【讨论】:

    • Could not find devise mapping for path "/forgotten". This may happen for two reasons: 1) You forgot to wrap your route inside the scope block. For example: devise_scope :user do get "/some/route" =&gt; "some_devise_controller" end 2) You are testing a Devise controller bypassing the router. If so, you can explicitly tell Devise which mapping to use: @request.env["devise.mapping"] = Devise.mappings[:user]
    猜你喜欢
    • 2015-02-03
    • 2021-07-21
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多