やっとRuby on Rails チュートリアル 実例を使って Rails を学ぼうを始めました。
これまでの学習では取りこぼしている事項があったので、それらをまとめておきたいと思います。
目次
コントローラー作成時にメソッド他も一緒に生成する
1 | >rails g controller [コントローラ名] [アクション名] ... |
とすることで、[アプリケーションルート]\app\controllers[コントローラー名]_controller.rb が作成される。
作成されたコントローラは以下のようになる。
1 | class [コントローラ名]Controller < ApplicationController |
更に、[アプリケーションルート]\app\views[コントローラ名] 以下に
[アクション名].html.erb ファイルが生成される。
さらに[アプリケーションルート]\config\routes.rb にルーティングも記述される
1 | Rails.application.routes.draw do |
この時コントローラ名をキャメルケースで記述したとき、作成されるファイルはスネークケースになる。
コントローラ作成の取り消し
1 | >rails g controller [コントローラ名] [アクション名] ... |
のようにコントローラを作成したとき
1 | >rails d(destroy) controller [コントローラ名] [アクション名] ... |
の実行でコントローラを削除できる
削除したとき[アプリケーションルート]\config\routes.rb に記述されたルーティングも削除される。
テスト実行
以下コマンドで定義されたテストが実行される。
1 | >rails t |
コントローラでのテスト定義された物は以下のようになっている。
1 | require 'test_helper' |
このままテスト実行すれば、3 つそれぞれアクセスできてテストはパスできる。
あえて routes.rb のルーティングを外してやると、エラー発生することを確認できる。
assert_response
レスポンスがあることをテストする
以下のように書く
1 | require 'test_helper' |
assert_select
レスポンスの中の特定のタグを取り出し、指定した記述があることをテストする
以下のように書く
1 | require 'test_helper' |
setup メソッド定義
テスト記述するクラス内で setup メソッドを定義すると、
テスト実行前に一度実行してくれる。
テスト項目の共通部分の定義などに使用する。
1 | require 'test_helper' |
カスタムヘルパーの作成
[アプリケーションルート]\app\helpers\application_helper.rb にメソッドを追加することで、ヘルパーを作成できる。
このヘルパーは.erb の中で呼び出せる。
現在時刻を取得するヘルパーなら、以下のようになる。
(表示回りはもっときれいにする必要がありそうだけれど・・・)
1 | module ApplicationHelper |
ハッシュ、シンボル
以下の二つの定義は同じものである
1 | a = { :name => "string"} |
どちらもハッシュのキーをシンボルにするものである。
後者の書き方は Ruby1.9 からサポートされた書き方
bootstrap の追加
Gemfile に以下の記述を追加しインストールする
1 | #gem 'bootstrap-sass', '3.3.7'がチュートリアルでの解説だったが、 |
1 | >bundle install |
skelton CSS を使いたいときは
自身がよく使う CSS ライブラリは skelton なのだけど gem でインストールする場合は、
helios-technologies/skeleton-railsから、
1 | gem 'skeleton-rails', :git => 'https://github.com/helios-technologies/skeleton-rails' |
を記載して以下のコマンドでインストール
1 | >rails g skeleton:install |
app/assets/stylesheets/application.css に以下の記載を追加する
1 | = require normalize |
これで動くそうだ
SCSS の追加
[アプリケーションルート]\app\helpers[任意名称].scss を作成する。
この[任意名称].scss に定義を追加することで独自のスタイルを定義できる。
これは[アプリケーションルート]\app\assets\stylesheets\application.css の記述で定義している 2 行において、すべての scss と css をまとめて読み込むせっていになっている。
1 | /* |
しかし、これだとアプリケーション全体に適用されることになり、
特定のページだけ別のものを充てることができない。
を参考にすると、
[アプリケーションルート]\app\assets\stylesheets\application.css から *= require_tree .
を削除する。
1 | /* |
[アプリケーションルート]\config\initializers\assets.rb に以下の記述を追加
1 | Rails.application.config.assets.precompile += %w( [ファイル名].scss ) |
ビューになる.erb で以下を記述する。
1 | <%= stylesheet_link_tag '[ファイル名]' %> |
この 3 行程でページ個別の css を定義できるようだ。
上記以外に、ページごとに body タグの割り当てクラスを変更してそれでコントロールしているものもあった。せっかく sass 使っているんだしという話。
データベース保存時の規定の処理を設定する。
[アプリケーションルート]\app\models[モデル名].rb を編集し、before_save
を追加する。
例えば、保存前に特定カラムの内容を小文字に変える場合は以下のようになる。
(参照元では、メールアドレスでこの処理を実施)
1 | class [モデル名] < ApplicationRecord |
モデル構造の変更
一度作ったモデルの内容を変更したいとき(カラム追加とか)は、マイグレーションファイルを作成する。
1 | >rails generate migration [任意名称] |
[アプリケーションルート]\db\migrate[日時文字列][任意名称.rb]が作成される。
作成された[アプリケーションルート]\db\migrate[任意名称.rb]の change メソッド内で、定義する。add_column
を使用して設定する。
1 | class AddPasswordDigestToUsers < ActiveRecord::Migration[5.2] |
以下のように記載するとファイルを変種る必要が無い。
1 | >rails generate migration add_password_digest_to_[テーブル名] [増やしたいカラム名]:[データベース型] |
マイグレーションファイルを作成後にrails db:migrate
及びrails db:migrate RAILS_ENV=test
を実行する。
rails db:migrate RAILS_ENV=test
はテスト用データベースへの展開、これがないと関連事項でのテストでつまずく。
debugger
コントローラで、
以下のようにdebugger
メソッドを記述する。
1 | def show |
このメソッドを通過するように、アクセスするとrails s
を実行したコンソールで(byebug)
を表示し、入力待ちする。
ここで、上記のコードなら@user
と入力することでオブジェクトの中を見ることができる。
他にも定義のある変数は参照できる。
Ctrl+D
を入力することで終了できる。
activerecord で ID 以外で検索
1 | [モデル名].find_by([カラム名]:[検索文字列]) |
結構な文字数になったので、ここでいったん切る。
まだまだメモする事項が多いのだけど、「これRuby on Rails チュートリアル 実例を使って Rails を学ぼうを素直に読めばいいじゃない?」と原点に戻った。
別途、Ruby on Rails チュートリアル 実例を使って Rails を学ぼうの内容通りできなかった部分だけ記載して、以後この件の記事はないかも。
ではでは。