在命名空间 Rails 脚手架中生成正确的路径
Generating proper paths in namespaced Rails scaffolds
当您使用 rails generate scaffold admin/user --model-name=User
或 rails generate scaffold_controller --model-name=User
时,它会以命名空间的方式生成几乎所有内容。你 app/controllers/admin/users_controller.rb
有你的控制器,app/views/admin/users/
充满了你的观点。
唯一不对的地方是你的路径。您必须手动将对 user_path
的引用替换为 admin_user_path
等。这很乏味。
有没有办法告诉 Rails 生成指向新命名空间的路径,而不是模型所在的命名空间?
使用 Rails 4.
使用 rails 内置生成器你不能。
查看generator source code了解原因:
<td><%%= link_to 'Show', <%= singular_table_name %> %></td>
<td><%%= link_to 'Edit', edit_<%= singular_table_name %>_path(<%= singular_table_name %>) %></td>
<td><%%= link_to 'Destroy', <%= singular_table_name %>, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
如您所见,它与 edit_<%= singular_table_name %>_path
一起生成编辑路径,而不考虑名称间距。 (还有haml-railsdoes the same)
如果您有时间和耐心,最好的办法是在代码库上修复此问题并提出 PR。这毕竟是开源的要点。
如果你朝这个方向走,请先看看未解决的问题,我没有深入研究,但似乎正在就此事进行不同的对话。喜欢https://github.com/rails/rails/pull/13927 or https://github.com/rails/rails/issues/21652
或者您可以使用现有的 gem,例如 Beautiful-Scaffold,它们似乎支持命名空间
当您使用 rails generate scaffold admin/user --model-name=User
或 rails generate scaffold_controller --model-name=User
时,它会以命名空间的方式生成几乎所有内容。你 app/controllers/admin/users_controller.rb
有你的控制器,app/views/admin/users/
充满了你的观点。
唯一不对的地方是你的路径。您必须手动将对 user_path
的引用替换为 admin_user_path
等。这很乏味。
有没有办法告诉 Rails 生成指向新命名空间的路径,而不是模型所在的命名空间?
使用 Rails 4.
使用 rails 内置生成器你不能。
查看generator source code了解原因:
<td><%%= link_to 'Show', <%= singular_table_name %> %></td>
<td><%%= link_to 'Edit', edit_<%= singular_table_name %>_path(<%= singular_table_name %>) %></td>
<td><%%= link_to 'Destroy', <%= singular_table_name %>, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
如您所见,它与 edit_<%= singular_table_name %>_path
一起生成编辑路径,而不考虑名称间距。 (还有haml-railsdoes the same)
如果您有时间和耐心,最好的办法是在代码库上修复此问题并提出 PR。这毕竟是开源的要点。
如果你朝这个方向走,请先看看未解决的问题,我没有深入研究,但似乎正在就此事进行不同的对话。喜欢https://github.com/rails/rails/pull/13927 or https://github.com/rails/rails/issues/21652
或者您可以使用现有的 gem,例如 Beautiful-Scaffold,它们似乎支持命名空间