almost 4 years ago

這篇要介紹如何運用layout和class繼承的特性實作Admin後台

本篇目標:做出網站的Admin後台,整個排版配置要與前台不一樣,而且所有動作都需要認證使用者
學習技巧:rails layout和ruby class繼承的運用

首先我們希望排admin後台的版型要完全不一樣,所以直覺的想到我們不能再使用layout/application.html.erb這個版型,因此我們可以自己新增一個layout,做出我們想要admin後台呈現的版型:

layout/admin.html.erb
<!DOCTYPE html>
<html>
<head>
  <title>Admin後台</title>
  <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %>
  <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
  <%= csrf_meta_tags %>
</head>
<body>
  <%= yield %>
</body>
</html>

接著只要在要使用admin layout的controller上加上layout "admin"就可以了,比方說admin users的controller就會是這樣:

admin/users_controller.rb
class Admin::UsersController < ApplicationController
  layout "admin"
  before_action :login_required
  before_action :admin_required
end

但是我們的admin namespace下可能會有很多的contorller,在每個controller中都加上layout設定login_requiredadmin_required雖然也是一個方法,但是就會變得有很多重複的code,一不小心就會漏改或是漏加,這時候就可以運用ruby class繼承的特性來統一管理admin下的所有controller。
首先先建立一個controller/admin_controller.rb的檔案,AdminController繼承於 ApplicationController,並加上admin controller應該要有的共同條件(此例就是要改layout跟使用者認證)

controller/admin_controller.rb
class AdminController < ApplicationController
  layout "admin"
  before_action :login_required
  before_action :admin_required
end

接著只要讓每個admin namespace下的controller都繼承於AdminController就可以了,以剛剛的Admin::UsersController為例,就會變成下方的這段code:

admin/users_controller.rb
class Admin::UsersController < AdminController
end

是不是突然變得很乾淨~!
其他的admin controller也比照辦理就可以了喔
教學結束。thx~:)

← Rails Add Index Rails Association - Self Join →
 
comments powered by Disqus