🙆
Rails6の学習・ビジュアルデザイン
ルーティングの設定
入れ子構造で作ることができる。
Rails.application.routes.draw do
namespace :staff do
root "top#index"
end
namespace :admin do
root "top#index"
end
namespace :customer do
root "top#index"
end
end
- root はブラウザがルートURLにアクセスした場合に、どのアクションが実行されるか指定するメソッド。シャープ記号の左側の
top
がコントローラー名、右側がアクション名。 -
top
というコントローラー名に対応するクラスは通常TopController
だが、namespace内で定義されているため、Staff::TopController
というクラスを指すことになる。
コントローラーとアクションの作成
$ bin/rails g controller staff/top
class Staff::TopController < ApplicationController
def index
render action: "index"
end
end
staff/top
でコントローラーをジェネレートしたので、クラスは↑で述べたようにStaff::TopController
となっている。
- Rails用語のアクションとは、コントローラークラスのpublicなインスタンスメソッドを指す。
-
render
は HTML を生成するメソッド。 - ERBテンプレートはapp/viewsディレクトリにコントローラーごとに分けて置き、ファイル名はアクション名とする。
- アクションの中で、一度もブラウザに返すメソッド(render、redirect_to、send_file、respond_with)が呼ばれなかった場合、そのアクションに対応するERBテンプレートでHTMLが返される。つまり省略が可能になる。
def index
end
これでもHTMLが返る。
ERBテンプレートで文字列のエスケープ処理
セキュリティの都合上、HTML特殊文字をページに表示してもエスケープ処理がされる。エスケープしたくない場合は ActiveSupport::SafeBuffer
クラスを利用する。このクラスはStringクラスを継承している。
<%= @fragment.html_safe %>
<%= raw(@fragment) %>
ヘルパーメソッド
ERBの中で使用できるメソッドをヘルパーメソッドと呼ぶ。 app/helpers/application_helper.rb
で、ApplicationHelper モジュールのメソッドとして定義すれば、それがヘルパーメソッドとなる。
module ApplicationHelper
def document_title
if @title.present?
"#{@title} - hoge"
else
"hoge"
end
end
end
present?
はRailsの拡張クラス。blank?
の否定。
レイアウトで利用すると。
<!DOCTYPE html>
<html>
<head>
<title><%= document_title %></title>
...
document_title
と変数っぽいが、これはメソッド呼び出し。
アセットのプリコンパイル
productionモードではRailsアプリケーションが画像ファイル、JSファイル、CSSファイルをブラウザに返さなくなる。これらはNginxなどのWebサーバーが取り扱う。
アセットプリコンパイル
$ bin/rails assets:precompile
ローカル環境でproductionモードを確認したい場合は、以下のコマンドを実行するとRailsがスタティックファイルも返すようになる。
$ export RAILS_SERVE_STATIC_FILES=1
Discussion