iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
自我挑戰組

Ruby on Rails JS系列 第 23

Ruby on Rails layout

只能⼀個版型嗎?
如果你喜歡,可以有多種款式的版型,預設的版型是
app/views/layouts/application.html.erb 。舉個例⼦來說,例如我想要增加
⼀款給後台專⽤的版型,可以在 app/views/layouts/ ⽬錄下新增⼀個
backend.html.erb ,內容如下:

<!DOCTYPE html>
<html>
<head>
15 Layout,Render 與 View Helper
225
<title>網站管理系統</title>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-tu
rbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-tr
ack': 'reload' %>
</head>
<body>
<h1>我是後台</h1>
<div class="container">
<%= yield %>
</div>
</body>
</html>

要套⽤這個版型有幾種做法:

  1. 整個 Controller 都套⽤同⼀個版型
    在 Controller 裡使⽤ layout ⽅法:
class CandidatesController < ApplicationController
layout "backend"
# ...[略]...
end

這樣整個 Controller 的⾴⾯在處理的時候就都會套⽤ backend 版型了。
2. 只有特定 Action 套某個版型
在特定 Action 裡使⽤ render ⽅法:

class CandidatesController < ApplicationController
def index
@candidates = Candidate.all
render layout: "backend"
end
# ...[略]...
end

這樣就只有這個 index 的⾴⾯會套⽤ backend 版型,其它沒特別交待的還是會
⽤預設版型。
3. 如果都不要?
如果因為某些原因,完全不想套任何版型,在 Controller 可以這樣寫:

class CandidatesController < ApplicationController
layout false
# ...[略]...
end
在特定 Action 可以這樣:
class CandidatesController < ApplicationController
def index
@candidates = Candidate.all
render layout: false
end
# ...[略]...
end

參考資料

[為你自己學Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html


上一篇
Ruby on Rails CSRF 攻擊是什麼?
下一篇
Ruby on Rails layout
系列文
Ruby on Rails JS29

尚未有邦友留言

立即登入留言