我可以在控制器中设置默认名称空间路由
我正在添加一个管理员名称空间和几个控制器,所以我们的东西可以从后端编辑内容。我可以在控制器中设置默认名称空间路由
例如,我有一个Book
模型和一个允许访客浏览的books_controller
。现在我正在添加一个admin/books_controller
,为管理员编辑图书提供了一个后端。
namespace :admin do
resources :books, except: :show
end
resources: books, only: [:index, :show]
目前在admin_books_controller视图的所有link_to
和form_for
,我需要添加命名空间:admin
这样的:
<%= form_for([:admin, @post]) do |f| %>
(在正常的控制器将是form_for(@post)
)
它有点重复,我想知道是否可以将它设置在管理控制器的某个位置,以便该控制器内的所有link_to
都将在管理命名空间中路由?
如果您将模型的范围限定在名称空间下,那么应自动将其反映到表单生成器中。
因此,像rails g model admin/book
这样的东西将生成嵌套在管理命名空间下的书籍模型。
如果再建立一个对象顶上的形式,像form_for Admin::Book.new
这应该针对任何适当嵌套的途径,如:
namespace :admin do
resources :books
end
我希望这给你可以尝试一个方向的一些指示。
此致敬礼。
谢谢,但我想要的是管理普通资源,即已经有一个Book模型,而且我不确定创建另一个Book模型是否是一个好主意。 – lulalala 2012-04-05 02:15:35
我想你可以扩展表单生成器,然后在你的所有管理页面中使用该表单生成器,但这看起来相当广泛,并且比简单地将':admin'添加到表单url数组中的描述性更强:) – Ekampp 2012-04-05 07:01:21
喔。只是想到了什么。另一种方法可能是创建一个辅助方法,比如'form_url',它接受一个参数(表单的对象)并返回数组'[:admin,object]'。 – Ekampp 2012-04-05 07:02:16
如果你需要这样做,也许你的代码不对。 – lzap 2012-04-03 11:16:08
@lzap更新了我的问题。你能详细说明吗? – lulalala 2012-04-08 03:49:19