Controller を作らないで View を追加したい
こんにちは。 Gaji-Labo 衛生班の和田です。
激落ちくん is Awesome!
この記事は、 Gaji-Labo Advent Calendar 2015、14日目のエントリです。
さて、 Ruby on Rails プロジェクトのフロントエンド開発を多く担当してる弊社では、以下のようなケースがよくあります。
- Visual Regression Testing のためのダミーページが欲しい
- 新規・リニューアルなどのために、現状は存在しないページを作りたい
- でも、都度、 routes や Controller 書くのは手間だよね
そこで、この記事では、気軽に view の開発を進めるための準備についてご紹介します。
※ここまでに書いた、「Ruby on Rails プロジェクトの開発環境を Vagrant で作る」、「Rails プロジェクトでフロントエンド開発を高速化する」も参考になれば幸いです。
条件
/sandbox/
以下は、テストや view の実装サンプルに使う/sandbox/admin/
以下は、管理画面用として、別のレイアウトを使用する
routes と Controller を書く
「Controller を作らないで View を追加したい」というタイトルですが、早速、routes と Controller を書きます(汗
ワイルドカードを使います。
参考:3.11 ルーティンググロブとワイルドカードセグメント | Rails のルーティング
config/routes.rb
Rails.application.routes.draw do
if Rails.env.development?
get 'sandbox/*path', to: 'sandbox#show'
end
end
Controller を書く
基本は、 layouts/application
を使う。 /sandbox/admin/xxx
だったら、 layouts/admin
を使う。
という条件です。
app/controller/sandbox_controller.rb
class SandboxController < ApplicationController
def show
if params[:path].split('/').first == 'admin'
layout = 'admin'
else
layout = 'application'
end
render "sandbox/#{params[:path]}", layout: layout
end
end
View を書く
ここまでの作業で、view のファイルを追加するだけで、以下のようにアクセスできるようになるはずです。
app/views/sandbox/blog/index.html.slim
-> //localhost:3000/sandbox/blog/index
app/views/sandbox/blog/category/index.html.slim
-> //localhost:3000/sandbox/blog/category/index
app/views/sandbox/admin/entries/index.html.slim
-> //localhost:3000/sandbox/admin/entries/index
app/views/sandbox/admin/entries/edit.html.slim
-> //localhost:3000/sandbox/admin/entries/edit
※ .slim
なのはプロジェクトによって読み替えてください。
まとめ
従来の流れ
1. HTML/CSS 書く人:「ページ追加するので用意してください」
2. Ruby 書く人: 「はーい」
3. HTML/CSS 書く人: 待つ
4. Ruby 書く人: 「用意しました」
5. HTML/CSS 書く人:「はーい、書くのでお待ちを」
6. Ruby 書く人: 待つ
7. HTML/CSS 書く人:「できました!実装お願いしまっす」
8. Ruby 書く人: 「はーい」
サンドボックス利用時
1. HTML/CSS 書く人:「ガシガシ書くのでいけるところから実装進めてください」
2. Ruby 書く人: 「はーい。お願いします!」
3. HTML/CSS 書く人:「全部、おわりました!」
4. Ruby 書く人: 「全部終わったので、一旦、サンドボックス閉じますね!」
のように待ち時間がなくなって、スムーズに進みます(かもしれないです)よね。
※「こういうの無駄な差分出るから嫌だよね」というご意見はあるかと思います。
弊社では、 Ruby on Rails プロジェクトで上記のような対応を適当にやってくれるフロントエンドエンジニアが担当いたします。ぜひ、お気軽にお声掛けください!