Rails tutorial 7章

学んだこと

  • shared/部分テンプレート
  • any?メソッド
  • pluralizeヘルパー
  • flashメッセージ

shared/部分テンプレート

Railsの慣習として、パーシャルは複数のコントローラにわたるビューに対し、専用のsharedディレクトリを使用する。

any?メソッド

any?メソッドはempty?メソッドの反対。

empty?メソッドは、オブジェクトが空の場合はtrue、それ以外の場合はfalseを返す。any?メソッドは、要素が一つtでもあればtrue、ない場合はfalseを返す。

pluralizeヘルパー

pluralizeヘルパーは、第一引数に整数が与えられると、それに基づいて第二引数の英単語を複数に変更したものを返す。

flashメッセージ

flash[:success] = "Welcome to the Sample App!"

flash変数を使い、キーに対応する値をセットする。上記の例はサインアップ成功時にsuccessがキー、Welcome to the Sample App!が値。

<% flash.each do |message_type, message| %>
  <div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>

呼び出すときはこんな感じで、flashに対してeachを使ってキーと値を使ってクラス名をつけたり、値を表示したりできる。

Rails tutorial 7章

学んだこと

  • shared/部分テンプレート
  • any?メソッド
  • pluralizeヘルパー
  • flashメッセージ

shared/部分テンプレート

Railsの慣習として、パーシャルは複数のコントローラにわたるビューに対し、専用のsharedディレクトリを使用する。

any?メソッド

any?メソッドはempty?メソッドの反対。

empty?メソッドは、オブジェクトが空の場合はtrue、それ以外の場合はfalseを返す。any?メソッドは、要素が一つtでもあればtrue、ない場合はfalseを返す。

pluralizeヘルパー

pluralizeヘルパーは、第一引数に整数が与えられると、それに基づいて第二引数の英単語を複数に変更したものを返す。

flashメッセージ

flash[:success] = "Welcome to the Sample App!"

flash変数を使い、キーに対応する値をセットする。上記の例はサインアップ成功時にsuccessがキー、Welcome to the Sample App!が値。

Rails turorial6章

学んだこと

  • メールを一意にする

メールを一意にする

メールアドレスを一意にすることでメールアドレスの認証ができるようになる。一意にする方法は以下。

  • メールのカラムをユニークにする
  • メールアドレスを保存前に小文字に変換する

Rails tutorial 5章

学習したこと

  • Asset Pipeline
  • pathとurl

Asset Pipeline

アセットパイプラインがアセットを連結、圧縮することでブラウザがWebページをレンダリングするためのリクエスト数を減らすことができる。Webブラウザが同時に処理できるリクエスト数には限りがあるため、同時リクエスト数を減らすとで読み込みを高速にできる。

Asset Pipelineの機能

  • アセットの連結
    • 複数のCSSファイル、JavaScriptファイルをそれぞれ一つのファイルに連結する。
    • ファイルのグループ化はカスタマイズ可能。
  • アセットの縮小・圧縮
    • ファイル内のコメントと空行を取り除く。
  • 高水準言語のコーディングを可能にする
    • 高水準言語をコンパイルし、実際に使用されるアセットにプリコンパイルする。
    • SassとCoffeScriptとERBがデフォルトで使える。

Asset Pipelineの肝

Asset Pipeline理解の肝は以下の3点。

アセットディレクト

Rails 3.0以前のバージョンでは、静的ファイルはpublic/以下の次のディレクトリに置かれていた。

  • public/stylesheets
  • public/javascripts
  • public/images

Rails3.1以降では、静的ファイルを目的別に分類する、標準的な3つのディレクトリが使用されるようになりました。最新のRailsでも同様です。

  • app/assets
    • 現在のアプリケーション固有のアセット
  • lib/assets
    • 開発チームによって作成されたライブラリ用のアセット
  • vendor/assets

これらのディレクトリにはstylesheets, javascripts, imagesのサブディレクトリがある。

マニフェストファイル

マニュフェストファイルは、読み込むアセットをまとめる。(実際にまとめるのはSprockets gemが行う)

プリプロセッサエンジン

プリプロセッサエンジンは、アセットをディレクトリに配置してまとめた後、Railsはさまざまなプリプロセッサエンジンを介してそれらを実行し、ブラウザに配信できるようにそれらをマニフェストファイルを用いて結合し、サイトテンプレート用に準備する。

参考

pathとurl

pathは、ルートURL以下の文字列を返し、urlは完全なURLの文字列を返す。

HTTP標準では技術的にリダイレクト後に完全なURLが要求されるためリダイレクトの場合のみ_urlを使用する。

Rails tutorial 4章

Rails tutorial 4章

学習したこと

  • %w

  • ブロック

    • 短いものは{}(波かっこ)を使って1行で
    • 長いものはdo endを使って複数行で
  • inspectメソッド

  • attire_accessor(アクセサメソッド)

  • マスアサインメント

    • 最後のハッシュ引数の波括弧を省略してキーとバリューを渡せるのがいいなと思った。引き数名がついた感じで良い。

    • 定義元のinitializeでdef initialize(attributes = {})

    • 呼び出すときにuser = User.new(name: "Michael Hartl", email: "mhartl@example.com")

Done Rails tutorial3章

Rails tutorial3章

はじめに

かなり前回の学習から時間が経ってしまいました。1週間で終えると言いながらも何日経ったかもわかりませんが再開します。

学習内容

  • テストは飛ばした
    • RSpecを後で学習するため
  • 本番(heroku)にもデプロイしない
    • herokuにはデプロイしたことがあるため

得た知識

初めてRSpecに触ったので覚え書きを

RSpecについて

RSpecディレクトリ構成

specファイルは、specディレクトリ以下に格納する。specファイルの位置は、appディレクトリ以下にあるテストの対象となるファイルの位置と対応させる。

◼︎例

app/models/

→spec/models/

specファイルの命名規則

specファイルは、対応するクラス名_spec.rbとなる。

◼︎例

app/models/user.rb

→spec/models/user_spec.rb

テストの書き方

describe テストグループ
  it 'テストする内容' do
    expect(チェックされる式).to 期待される結果
  end
end

it do ~endまでを1つのテストとする。これをexampleを呼ぶ。

describe

describeは、直後のdo ~endまでのテストのグループを作る。describeの後に続く''の中にテストのグループの説明をする。

itとexample

itはexampleと呼ばれるテストコードのまとまりを表す。itの後に続く''の中には、exmapleの説明をする。

エクスペクテーション

エクスペクテーションとは、実際に評価される式のこと。it do ~ endの間に書く。

マッチャ

マッチャは、エクスペクテーションの中で、テストが成功する条件を示す。マッチャはeq(等しければ)やincludde(含んでいれば)など複数のマッチャが存在する。

◼︎例

ユーザーを保存するときに名前が入力されていない場合のテスト

require 'rails_helper'

describe User do
  describe '#create' do
    it 'is invalid without a name' do
      user = User.new(name: '')
      user.valid?
      expect(user.errors[:name]).to include("can't be blank')
    end
  end
end

解説

1行めのrequire 'rails_helperは、rails_helper.rbを読み込み共通の設定を有効にしている。すべてのspecファイルで読み込む。

3, 4行めでdescribeがネストされて繰り返されている。意味としては、「Userクラスのcreateメソッドをテストするまとまり」ということになる。メソッドをテストするので、#をつけてある。

5行めでnameプロパティを持ったUserクラスのインスタンスを新規作成した。

6行めでvalid?を使い、作成したインスタンスがバリデーション(nameに対して、presence: trueのバリデーションがかかっている前提)によって保存できないことを確認する。

7行めでerrorsを使い、validによって追加された保存できない理由に「cant't be blank」が含まれいるかテストする