simple_form_for 具有本地化、范围内的路由和 Mongoid(缺少必需的键:[:id])
simple_form_for with localized, scoped routes and Mongoid (missing required keys: [:id])
我有一个模型 FileType
的 _form.html.haml
部分,我想在我的 new.html.haml
和 edit.html.haml
视图中呈现。
= simple_form_for [:document_manager, file_type] do |f|
...
当我在 new 视图中渲染这个部分时,这是有效的,但是当我在 edit 视图中渲染它时,simple_form
尝试将 file_type
的 id
设置为 locale
参数,如果我的路线。我的路线如下所示:
Rails.application.routes.draw do
scope '(:locale)', locale: locale: /#{I18n.available_locales.join('|')}/ do
namespace :document_manager do
resources :file_types, except: [:show]
end
end
end
对于 new 视图生成路由 /en/document_manager/file_types
,但是当我尝试访问 edit 视图时,我得到此错误:
No route matches {
:action=>"update",
:controller=>"document_manager/file_types",
:format=>nil,
:id=>nil,
:locale=>#<FileType _id: 550198ca7462720388010000, user_file_id: nil, file_name: "...", description: "...">
} missing required keys: [:id]
如何更改 id
和 locale
参数为 new 和 edit[=48 设置的正确格式=]?
更新: 第一个可行的解决方案是删除 locale
范围并将语言存储在会话中,但对于 SEO,这将导致重复内容,所以更好的解决方案是使用如下网址:
- /en/document_manager/file_types
- /fr/document_manager/file_types
- /de/document_manager/file_types
- ...
使用正常路径,有时 rails 过于复杂,在这种情况下,它应该自动使用您正在使用的范围,但是当您尝试使用它时,我只使用了像 /en|es|fr/
这样的硬编码范围.
如果我是你,我会使用类似的东西:
= simple_form_for document_file_type_path, method: :post do |f|
并使用 2 种不同的形式,尝试对可用的语言环境进行硬编码,例如
scope "(:locale)", :locale => /en|es|fr/ do
resources :foos
resources :bars
...
编辑
看起来也在等待 3 个参数尝试:
[:document_manager, "locale", file_type]
我有一个模型 FileType
的 _form.html.haml
部分,我想在我的 new.html.haml
和 edit.html.haml
视图中呈现。
= simple_form_for [:document_manager, file_type] do |f|
...
当我在 new 视图中渲染这个部分时,这是有效的,但是当我在 edit 视图中渲染它时,simple_form
尝试将 file_type
的 id
设置为 locale
参数,如果我的路线。我的路线如下所示:
Rails.application.routes.draw do
scope '(:locale)', locale: locale: /#{I18n.available_locales.join('|')}/ do
namespace :document_manager do
resources :file_types, except: [:show]
end
end
end
对于 new 视图生成路由 /en/document_manager/file_types
,但是当我尝试访问 edit 视图时,我得到此错误:
No route matches {
:action=>"update",
:controller=>"document_manager/file_types",
:format=>nil,
:id=>nil,
:locale=>#<FileType _id: 550198ca7462720388010000, user_file_id: nil, file_name: "...", description: "...">
} missing required keys: [:id]
如何更改 id
和 locale
参数为 new 和 edit[=48 设置的正确格式=]?
更新: 第一个可行的解决方案是删除 locale
范围并将语言存储在会话中,但对于 SEO,这将导致重复内容,所以更好的解决方案是使用如下网址:
- /en/document_manager/file_types
- /fr/document_manager/file_types
- /de/document_manager/file_types
- ...
使用正常路径,有时 rails 过于复杂,在这种情况下,它应该自动使用您正在使用的范围,但是当您尝试使用它时,我只使用了像 /en|es|fr/
这样的硬编码范围.
如果我是你,我会使用类似的东西:
= simple_form_for document_file_type_path, method: :post do |f|
并使用 2 种不同的形式,尝试对可用的语言环境进行硬编码,例如
scope "(:locale)", :locale => /en|es|fr/ do
resources :foos
resources :bars
...
编辑
看起来也在等待 3 个参数尝试:
[:document_manager, "locale", file_type]