【问题标题】:Rails route error switch localRails 路由错误切换本地
【发布时间】: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&ntilde;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


    【解决方案1】:

    尝试将:method =&gt; :get 添加到您的表单中,像这样

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

    【讨论】:

    • 就是这样。你能解释一下为什么我必须添加 GET 方法吗?非常感谢。
    • 因为 form_tag 默认生成一个带有 POST 作为 http 方法的表单,而你只有一个 GET 方法的路由,所以你的表单应该有 GET 作为方法
    猜你喜欢
    • 2010-12-26
    • 2012-05-22
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多