1

railscastsに見られるように国際化を実装しようとしていますが、routesファイルをスコープするたびにエラーが発生します

 No route matches [GET] "/"

またはエラー

missing :controller
config/routes.rb:6:in `block (2 levels) in <top (required)>'
config/routes.rb:5:in `block in <top (required)>'
config/routes.rb:1:in `<top (required)>'

これが私のroutes.rbファイルです

Jensenlocksmithing::Application.routes.draw do
  get "log_out" => "sessions#destroy", as: "log_out"
  get "log_in" => "sessions#new", as: "log_in"

  scope ":locale" do
    get "site/home"
    get "site/about_us"
    get "site/faq"
    get "site/discounts"
    get "site/services"
    get "site/contact_us"
    get "site/admin"
    get "site/posts"

    root :to => 'site#home'
  end

  #match '*path', to: redirect("/#{I18n.default_locale}/%{path}")
  #match '', to: redirect("/#{I18n.default_locale}")

  match "/savesort" => 'site#savesort'

  resources :users
  resources :abouts
  resources :sessions
  resources :coupons
  resources :monthly_posts
  resources :reviews

  resources :categories do
    collection { post :sort }
      resources :children, :controller => :categories, :only => [:index, :new, :create,  :new_subcategory]
  end
  resources :products do
    member do
       put :move_up
       put :move_down
   end 
  end
  resources :faqs do
    collection { post :sort }
  end 
end

では、スコープ ":locale"を追加するたびに、エンドラインでこれらのエラーが発生するのはなぜですか?それがなくてもすべて正常に動作します。これ以上コードを表示する必要がある場合はお知らせください。みんなありがとう

編集

私のアプリケーションコントローラーには、次のものがあります。

private

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

これは、ルートでハッシュを渡すのと同じことをしますか?

編集2

この要点にあるように、ルートを次のように変更しました。 https://gist.github.com/2322844

では、なぜ:id部分がgetルートに追加されるのでしょうか。このように

 about_us_site GET  /sites/:id/about_us(.:format)  

こんな感じじゃないですか

 about_us_site GET  /sites/about_us(.:format)

詳細については、routes.rbファイル全体とそれが生成するルートも追加しました。
https://gist.github.com/2322861

興味のある人への回答:

私が変更され

    get "site/home"
    get "site/about_us"
    get "site/faq"
    get "site/discounts"
    get "site/services"
    get "site/contact_us"
    get "site/admin"
    get "site/posts"

    root :to => 'site#home'

 resources :sites, except: [:new, :edit, :index, :show, :update, :destroy, :create] do  
   collection do  
   get :home  
   get :about_us  
   get :faq  
   get :discounts  
   get :services  
   get :contact_us  
   get :admin  
   get :posts  
 end  

終わり

4

1 に答える 1

2

ハッシュを渡すと、ルートが修正されます。

scope "(:locale)", :defaults => { :locale => "en" } do
  resources :sites
end

また、を作成しSitesControllerて与えることを検討することもできますmembers

resources :sites do
  member do
    get :about_us # Points to /sites/about_us
  end
end
于 2012-04-06T04:21:19.330 に答える