我可以在控制器中设置默认名称空间路由

问题描述:

我正在添加一个管理员名称空间和几个控制器,所以我们的东西可以从后端编辑内容。我可以在控制器中设置默认名称空间路由

例如,我有一个Book模型和一个允许访客浏览的books_controller。现在我正在添加一个admin/books_controller,为管理员编辑图书提供了一个后端。

namespace :admin do 
    resources :books, except: :show 
    end 
    resources: books, only: [:index, :show] 

目前在admin_books_controller视图的所有link_toform_for,我需要添加命名空间:admin这样的:

<%= form_for([:admin, @post]) do |f| %> 

(在正常的控制器将是form_for(@post)

它有点重复,我想知道是否可以将它设置在管理控制器的某个位置,以便该控制器内的所有link_to都将在管理命名空间中路由?

+0

如果你需要这样做,也许你的代码不对。 – lzap 2012-04-03 11:16:08

+0

@lzap更新了我的问题。你能详细说明吗? – lulalala 2012-04-08 03:49:19

如果您将模型的范围限定在名称空间下,那么应自动将其反映到表单生成器中。

因此,像rails g model admin/book这样的东西将生成嵌套在管理命名空间下的书籍模型。

如果再建立一个对象顶上的形式,像form_for Admin::Book.new这应该针对任何适当嵌套的途径,如:

namespace :admin do 
    resources :books 
end 

我希望这给你可以尝试一个方向的一些指示。

此致敬礼。

+0

谢谢,但我想要的是管理普通资源,即已经有一个Book模型,而且我不确定创建另一个Book模型是否是一个好主意。 – lulalala 2012-04-05 02:15:35

+0

我想你可以扩展表单生成器,然后在你的所有管理页面中使用该表单生成器,但这看起来相当广泛,并且比简单地将':admin'添加到表单url数组中的描述性更强:) – Ekampp 2012-04-05 07:01:21

+0

喔。只是想到了什么。另一种方法可能是创建一个辅助方法,比如'form_url',它接受一个参数(表单的对象)并返回数组'[:admin,object]'。 – Ekampp 2012-04-05 07:02:16