Rails:使用form_with的语言环境?

时间:2018-10-15 11:23:22

标签: ruby-on-rails ruby forms ruby-on-rails-5 locale

如何使用语言环境和form_with?按语言环境,我的意思是/en,而不是/?locale=en

这是我的视图文件的一部分:

<%= form_with(model: @model, local: true, locale: I18n.locale) do |form| %>

提交表单后,出现以下错误:

No route matches {:action=>"show", :controller=>"model_name", :format=>nil, :locale=>#<ModelName id: 2, created_at: "2018-10-15 11:07:36", updated_at: "2018-10-15 11:08:09">}, missing required keys: [:id], possible unmatched constraints: [:locale]

请注意如何在给定模型中设置区域设置...

这是我的routes.rb

root 'model_name#new'

scope ':locale', locale: /[a-z]{2}/ do
  root 'model_name#new'
  resources :model_name, only: [:create, :show]
end

我不明白为什么我需要两次设置root权限,但是...

谢谢!

2 个答案:

答案 0 :(得分:1)

Rails正在使用您的ModelName实例,因为未设置区域设置。 为确保您的语言环境在url中设置,请将default_url_options方法添加到application_controller,其中set_locale包含应用程序语言环境的逻辑。

def default_url_options
   { locale: set_locale }
end

private def set_locale
  params[:locale] || I18n.default_locale
end

来源:https://guides.rubyonrails.org/i18n.html#managing-the-locale-across-requests

答案 1 :(得分:0)

范围内的

root表示范围的根。

示例:

root # matches / 
scope ':locale' do
  root # matches /en/
  resources :foos # matches /en/foos, /en/foo/1, ...
end

我建议您致电rake routes,以查看您定义的路线并进行一些尝试。

然后返回您得到的错误。此错误表示作用域上的约束不匹配。我敢打赌,语言环境是空的。 根据{{​​1}}的{​​{3}},您应该使用范围选项,如下所示:

form_with