我正忙着通过 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它可以正常工作。但是,如果在创建的下拉列表中选择它,我会收到提到的错误
答案 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