gpt4 book ai didi

ruby-on-rails - Devise and I18n - 重置密码路由问题

转载 作者:行者123 更新时间:2023-12-02 06:20:21 24 4
gpt4 key购买 nike

我在使用 Devise 的 RoR 应用程序中添加了 I18n,如果我尝试重置密码,现在会收到错误消息。错误是:

Routing Error
No route matches {:action=>"edit", :controller=>"devise/passwords", :reset_password_token=>"uMopWesaxczNn2cdePUQ"}

如何正确设置我的 Devise 路由以考虑 I18n?

routes.rb

 scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do   
devise_for :users, path_names: {sign_in: "login", sign_out: "logout"},
controllers: {omniauth_callbacks: "omniauth_callbacks"}
root to: 'static_pages#home'
end

match '*path', to: redirect {|params| "/#{I18n.default_locale}/#{CGI::unescape(params[:path])}" }, constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" }
match '', to: redirect("/#{I18n.default_locale}")

application_controller.rb

before_filter :set_locale
def set_locale
I18n.locale = params[:locale] if params[:locale].present?
end

def default_url_options(options = {})
{locale: I18n.locale}
end

最佳答案

我确实创建了一个 sample app正是针对这种情况(设计+国际化)。自从我创建该应用程序以来已经有一段时间了,它可能有一些小错误/不完整,但关键是使用带括号的可选范围。

当你没有 :locale 变量集时,你的代码 devise_for :users 没有定义问题(这是我从你的错误中猜测的,重定向代码在你的路线可能不工作 - 你真的不需要那个,我没有测试过,但我不认为这是一个好习惯)。此外,这就是为什么它试图将 token 值分配为 :locale 变量。

相反,您需要使用括号。因此 :locale 将是可选的,并且当未设置 :locale 时,您的路由定义将保持有效。

scope "(:locale)", :locale => /en|tr/ do
devise_for :users
root :to => "main#index"
end

希望对你有帮助。

关于ruby-on-rails - Devise and I18n - 重置密码路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11900085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com