Locale切换器

时间:2014-06-18 16:25:50

标签: ruby-on-rails ruby ruby-on-rails-4 rails-i18n

我正忙着通过 PBP - 使用Rails进行敏捷Web开发并实现区域设置切换器。

然而,当我尝试在英语和西班牙语之间切换时,我收到一个错误:

No route matches [POST] "/en"

我的控制器如下:

class StoreController < ApplicationController
  skip_before_filter :authorize

  def index
    if params[:set_locale]
      redirect_to store_path(locale: params[:set_locale])
    else
      @products = Product.order(:title)
      @cart = current_cart
    end
  end
end

以及正在使用的application.hmtl.erb的摘录;

<div id="banner">
  <%= form_tag store_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 %>
  <%= image_tag("logo.png") %>
  <%= @page_title || t('.title') %>
</div>

路由文件夹如下:

scope'(:locale)' do
  resources :users
  resources :orders
  resources :line_items
  resources :carts
  resources :products do
    get :who_bought, on: :member
  end
root to: 'store#index', as: 'store'
end

不能弄清楚我做错了什么。如果我在网址中输入/ en或/ es它可以正常工作。但是,如果在创建的下拉列表中选择它,我会收到提到的错误

2 个答案:

答案 0 :(得分:1)

发现问题,form_tag期待POST,所以我改变了

<%= form_tag store_path, class: 'locale' do %>

<%= form_tag store_path, class: 'locale', :method => :get do %>

并且有效

答案 1 :(得分:0)

您在示波器中缺少斜线,因为指南指出:

# config/routes.rb
scope "/:locale" do
  resources :books
end

http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-url-params

相关问题