如何使用语言环境和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权限,但是...
谢谢!
答案 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