Layout là "wrapper" HTML chứa phần chung của trang (header, footer, nav).
Mặc định mọi action dùng app/views/layouts/application.html.erb.
erb
<%# app/views/layouts/application.html.erb %>
<!DOCTYPE html>
<html>
<head>...</head>
<body>
<%= yield %> <%# nội dung của từng action render vào đây %>
</body>
</html>Chọn layout theo controller:
ruby
class AdminController < ApplicationController
layout "admin" # dùng app/views/layouts/admin.html.erb
end
# Hoặc điều kiện:
class PostsController < ApplicationController
layout :choose_layout
private
def choose_layout
current_user&.admin? ? "admin" : "application"
end
endDùng render layout: false để render không có layout (API response JSON).
A layout is an HTML "wrapper" containing the shared parts of a page (header, footer, nav).
By default every action uses app/views/layouts/application.html.erb.
erb
<%# app/views/layouts/application.html.erb %>
<!DOCTYPE html>
<html>
<head>...</head>
<body>
<%= yield %> <%# each action's content is rendered here %>
</body>
</html>Select layout per controller:
ruby
class AdminController < ApplicationController
layout "admin" # uses app/views/layouts/admin.html.erb
end
# Or conditionally:
class PostsController < ApplicationController
layout :choose_layout
private
def choose_layout
current_user&.admin? ? "admin" : "application"
end
endUse render layout: false to render without a layout (e.g. for JSON API responses).