Ruby on 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相当陌生,一直无法找出我做错了什么。
想知道是否有人能帮忙吗?
我有一个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