Ruby on rails 将应用程序更改为多语言应用程序时,Rails中的路由失败
我对Rails相当陌生,一直无法找出我做错了什么。Ruby on rails 将应用程序更改为多语言应用程序时,Rails中的路由失败,ruby-on-rails,localization,internationalization,Ruby On Rails,Localization,Internationalization,我对Rails相当陌生,一直无法找出我做错了什么。 想知道是否有人能帮忙吗? 我有一个Rails应用程序,在我开始修改使其成为多语言之前,它工作正常 为了使其具有多语言性,我采取了以下步骤: 我将此添加到路由文件: 作用域“(:locale)”,:locale=>/en | is/do 路由文件: PropertyEvaluator::Application.routes.draw do scope "(:locale)", :locale => /en|is/ do
想知道是否有人能帮忙吗?
我有一个Rails应用程序,在我开始修改使其成为多语言之前,它工作正常 为了使其具有多语言性,我采取了以下步骤: 我将此添加到路由文件:
作用域“(:locale)”,:locale=>/en | is/do 路由文件:
PropertyEvaluator::Application.routes.draw do
scope "(:locale)", :locale => /en|is/ do
root :to => "pages#home"
get 'pages/about'
get 'pages/home'
get "log_out" => "sessions#destroy", :as => "log_out"
get "log_in" => "sessions#new", :as => "log_in"
get "sign_up" => "users#new", :as => "sign_up"
resources :searches, :only => [:index, :new, :create]
resources :users, :only => [:index, :new, :create, :edit, :update, :destroy]
resources :sessions, :only => [:new, :create, :destroy]
resources :password_resets, :only => [:new, :create, :edit, :update]
resources :email_activations, :only => [:edit]
resources :roles, :only => [:edit, :update]
end
end
修改前的路由文件:
PropertyEvaluator::Application.routes.draw do
root :to => "pages#home"
get 'pages/about'
get 'pages/home'
get "log_out" => "sessions#destroy", :as => "log_out"
get "log_in" => "sessions#new", :as => "log_in"
get "sign_up" => "users#new", :as => "sign_up"
resources :searches, :only => [:index, :new, :create]
resources :users, :only => [:index, :new, :create, :edit, :update, :destroy]
resources :sessions, :only => [:new, :create, :destroy]
resources :password_resets, :only => [:new, :create, :edit, :update]
resources :email_activations, :only => [:edit]
resources :roles, :only => [:edit, :update]
end
添加到应用程序_controller.rb I
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
Rails.application.routes.default_url_options[:locale]= I18n.locale
在我添加的视图中:
<%= link_to_unless I18n.locale == :is, "IS", locale: :is %>
|
<%= link_to_unless I18n.locale == :en, "EN", locale: :en %>
|
使用原始路由文件时,一切正常,但当我将作用域添加到路由文件时,问题就开始了
我得到以下错误:
No route matches {:action=>"edit", :controller=>"users", :format=>nil, :id=>nil, :locale=>#<User id: 2, email: "bjarni.sigurdsson@bodeind.is", password_hash: "$2a$10$WzcoB5pES3TXYbWpe7xtB.yKFnqi.dhQgMXOp8/nyKi...", password_salt: "$2a$10$WzcoB5pES3TXYbWpe7xtB.", created_at: "2014-09-30 15:20:38", updated_at: "2014-10-01 12:41:57", name: "Bjarni Sigurðsson", auth_token: "wY2cfwk-1R7fSjCvqQPaWQ", password_reset_token: nil, password_reset_sent_at: nil, admin: true, email_confirmed: true, email_activation_token: nil, email_confirmed_at: "2014-09-30 15:20:38", role: 4>} missing required keys: [:id]
没有路由匹配{:action=>“edit”,:controller=>“users”,:format=>nil,:id=>nil,:locale=>#}缺少必需的键:[:id]
指向视图中的以下代码:
<%= link_to(t('views.shared.navbar.edit_user_profile'), edit_user_path(current_user), class: 'btn btn-primary') %>
如果我从路由文件中删除该范围,则可以工作,但选定的区域设置不会显示在url中
有人能帮忙吗 除了在生成路径时传递
:locale
参数外,一切正常。看看例外情况,有::locale=>#感谢您的帮助。按预期工作。
def default_url_options(options={})
{ locale: I18n.locale }
end