我在RubyonRails 3.2:中的mailer模板中有这个操作
# password_reset.text.erb
<%= edit_password_reset_path(@user.password_reset_token) %>
不幸的是,当我点击该链接时,我得到了一个奇怪的路由错误:
No route matches {:action=>"edit", :controller=>"password_resets", :locale=>"Ze92D45dUPpfwsgbFmpYeg"}
奇怪的是,locale
在这里似乎包含password_reset_token
,而不是区域设置(例如en
或de
)。
所以我想edit_password_reset_path
没有自动本地化,这是导致错误的原因吗?
这怎么能解决?
以下是更多信息:
class PasswordResetsController < ApplicationController
def edit
@user = User.find_by_password_reset_token!(params[:id])
end
end
# routes.rb
scope '(:locale)' do
resources :password_resets
....
end
您需要将令牌作为查询参数发送:
edit_password_reset_path(@user, password_reset_token: @user.password_reset_token)
# Passing in the @user fulfills the :id section of the url.
通过执行edit_password_reset_path(@user.password_reset_token)
,您将向:locale
部分提供重置令牌。
同时提供区域设置:
edit_password_reset_path(@user, locale: "de", password_reset_token: @user.password_reset_token)