GSt*_*Sto 31 layout ruby-on-rails
我在'admin'命名空间下创建了许多控制器和视图,但它们仍在应用程序布局中.如何制作适用于命名空间路由中所有视图的布局,并仍然使用当前布局用于其他页面?
Ale*_*lex 41
我通常在我的命名空间中有一个Base控制器类,然后让该命名空间中的所有控制器继承它.这允许我在Base中放置特定于命名空间的特定代码,并且该命名空间中的所有控制器都可以利用.例如:
class Admin::BaseController < ApplicationController
layout 'admin'
before_filter :require_admin_user
end
class Admin::WidgetsController < Admin::BaseController
# inherits the 'admin' layout and requires an admin user
end
Run Code Online (Sandbox Code Playgroud)
小智 36
一般来说,如果没有与控制器匹配的布局,Rails将使用应用程序布局.例如,如果您有一个PeopleController,Rails会查找layouts/people.html.erb,如果没有找到,则为application.html.erb.
如果要覆盖此约定,可以显式指定特定布局.
class Admin::PeopleController
layout 'some_layout'
end
Run Code Online (Sandbox Code Playgroud)
然后该控制器将使用some_layout.html.erb而不是查找people.html.erb和application.html.erb.
但是如果你想要分组的话,这可能是一个更好的方法: 如果你有一个继承自ApplicationController的基本AdminController,你可以让你的Admin :: PersonController继承自AdminController,它将继承admin布局.
我不知道您的代码的具体细节,但您可能有:
class AdminController
def show
#render a template linking to all the admin stuff
end
end
app/controllers/admin/people_controller.rb:
class Admin::PeopleController < AdminController
#your awesome restful actions in here!
end
views/layouts/admin.html.erb:
Hello from the Admin!
<%= yield %>
Run Code Online (Sandbox Code Playgroud)
要实现的一件事是Admin :: PeopleController将继承AdminController定义的任何操作(就像在ApplicationController中定义的任何操作在所有子类中都可用).这通常不是问题,因为无论如何你可能会覆盖这些方法,但只是要意识到它.如果您没有AdminController,则可以仅针对布局创建一个不执行任何操作的控制器.
| 归档时间: |
|
| 查看次数: |
15349 次 |
| 最近记录: |