2013-12-10 50 views
0

我正在用多種語言設置我的新Rails網站,並且遇到路由問題。我遵循「使用Rails 4開發敏捷web開發」一書的指導。Rails路由錯誤開關本地

瀏覽器打印出這個錯誤,但我可以看到路由創建正確,因此: 我在做什麼錯了?當我嘗試在瀏覽器中直接把路由(「本地主機(在此消息的結尾,我會附上我的所有路由)

沒有路由匹配[POST]「/ EN /家」

:3000/en「OR」localhost:3000/es「)一切正常。只有當我更換我的語言的切換器時纔會打印錯誤。這就是爲什麼我認爲路線設置正確,我認爲是我的切換臺或控制器的問題......?

這是application.html.rb代碼(基本語言之間切換器):

<%= form_tag home_path, class: 'locale' do %> 
<%= select_tag 'set_locale', 
options_for_select(LANGUAGES, I18n.locale.to_s), 
onchange: 'this.form.submit()' %> 
<%= submit_tag 'submit' %> 
<%= javascript_tag "$('.locale input').hide()" %> 
<% end %> 

這是我的routes.rb文件的配置:

Group::Application.routes.draw do 

    devise_for :admin_users, ActiveAdmin::Devise.config 
    ActiveAdmin.routes(self) 

    scope '(:locale)' do 
    resources :posts 
    resources :contacts 

    root "posts#home" 
    get "/home" => "posts#home" 
    get "/contact" => "contacts#new" 

    # static pages 
    get "/investment" => "contents#investment" 
    get "/partner-with-us" => "contents#partner", as: "partner" 
    get "/our-companies" => "contents#companies", as: "companies" 
    get "/site-map" => "contents#sitemap", as: "sitemap" 
    get "/terms-and-conditions" => "contents#terms", as: "terms" 
    get "/privacy" => "contents#privacy" 

    end 
    end 

這是在/config/initializers/i18n.rb創建的文件:

#encoding: utf-8 
I18n.default_locale = :en 

LANGUAGES = [ 
    ['English', 'en'], 
    ["Espa&ntilde;ol".html_safe, 'es'] 
] 

最後,這是我的posts_c代碼ontroller.rb,因爲這裏是我爲了把過去後在主頁上創建一個動作「家」:

class PostsController < ApplicationController 
    def index 
     @posts = Post.all.order("created_at desc") 
    end 

    def show 
     @post = Post.find(params[:id]) 
    end 

    def home 
     if params[:set_locale] 
      redirect_to home_url(locale: params[:set_locale]) 
     else 
      @posts = Post.all.order("created_at desc") 
     end 
    end 

end 

回答

0

嘗試添加:method => :get到您的形式,這樣

<%= form_tag home_path, class: 'locale', :method => :get do %> 
+0

謝謝你,朋友。 – user2092653

+0

就是這樣。你能解釋我爲什麼必須添加GET方法嗎?非常感謝你。 – user2092653

+0

,因爲默認情況下form_tag生成一個帶有POST方式的表單作爲http方法,並且您只有一個GET方法的路由,因此您的表單應該具有GET方法 – amine