【发布时间】:2013-12-10 13:39:18
【问题描述】:
我正在用一种以上的语言设置我的新 Rails 网站,但我遇到了路线问题。我正在遵循“使用 Rails 4 进行敏捷 Web 开发”一书的说明。
浏览器向我打印此错误,但我可以看到路由已正确创建,因此: 我究竟做错了什么? (在此消息的末尾,我将附上我的所有路线)
没有路线匹配 [POST] "/en/home"
当我尝试将路由直接放入浏览器(“localhost:3000/en”或“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ñol".html_safe, 'es']
]
最后,这是我的 posts_controller.rb 的代码,因为在这里我创建了一个动作“home”,以便将最后一篇帖子放在主页中:
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
【问题讨论】:
标签: ruby-on-rails internationalization routes