0

我在 Ruby on Rails 3.2 的邮件模板中有这个动作:

# 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这里而不是语言环境(例如ende)。

所以我猜这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
4

1 回答 1

1

您需要将令牌作为查询参数发送:

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)
于 2013-02-11T20:31:06.417 回答