railstutorial.jp 5章メモ

  • テーマ
    • Twitter Bootstrap
    • レイアウト
    • パーシャル
    • ルーティング
    • Asset Pipeline
    • CSS
    • Sass

Gem追加

gem 'bootstrap-sass'
gem ‘sprockets'

config/application.rbに追加

config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)

Bootstrap CSSを追加

app/assets/stylesheets/custom.css.scss

@import "bootstrap”;

partialに切り出す
パーシャルファイルは先頭アンダースコアから始まる

<%= render 'layouts/shim' %>
app/views/layouts/_shim.html.erb

Asset Pipeline

アセットディレクトリ、マニフェストファイル、プリプロセッサエンジン

アセットディレクトリ

Rails3.0 以前の静的ファイルの置き場所(以降でも使える)

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

Rails3.1以降は静的ファイルを目的別に分類する

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

マニフェストファイル

どのように1つにまとめるかの設定
Sprockets gemが実際にまとめる(css, jsのみ、画像は除く)

app/assets/stylesheets/application.css

app/assets/stylesheetsディレクトリ配下全CSSをアプリケーションCSSに含む

*= require_tree . 

application.css自身も含む

*= require_self

プリプロセッサエンジン

ファイルの拡張子で判断される
foobar.js.erb.coffeeだと、Coffeeスクリプト→ERbと実行されてjsが作成される

Sass

  • $で変数が使える
  • 継承をネストでまとめられる
  • 同一のネームスペースを持つプロパティ(font-とか)はネストできる
  • @importでCSSを1個にまとめられる
  • まとまったスタイルを変数のようにパッケージしておけるミックスイン機能
  • @mixin(=)で定義して、@include(+)で呼び出す
  • ミックスインは関数のように変数を引数に使うことができる
  • 値の加減乗除ができる
  • pxとinなど、別の単位同士でも演算できる
  • 条件分岐とループ処理ができる@if @for @each @while
  • 可読率と圧縮率がコンパイルオプションで帰られる :nested, :expanded, :compact, :compressed

親属性の参照は&

#logo {
  &:hover {

  }
}

bootstrap-sassはSassでもLESS変数が使える

ルーティング

match '/about',   to: 'static_pages#about',   via: ‘get'

rake routesで確認できるPrefix+path, url

about_path -> '/about'
about_url -> 'http://localhost:3000/about'

Rspecの洗練

beforeブロック( before(:each) )

subject { page }

Rspecのユーティリティspec/support/utilities.rb

spec/supportディレクトリはRSpecによって自動的に読み込まれる

full_titieがないってエラーになった

     Failure/Error: it { should have_title(full_title('')) }
     NoMethodError:
       undefined method `full_title' for #<RSpec::ExampleGroups::StaticPages::HomePage:0x007fa3aa6ddc60>

static_pages_spec.rbの最初に以下入れたら動いた

include ApplicationHelper

Usersコントローラの追加

コントローラは複数

$ rails g controller Users new --no-test-framework

ふるまいのテスト追加

$ rails generate integration_test user_pages
$ rspec spec/requests/user_pages_spec.rb

ディレクトリを指定してテスト可能

$ rspec spec/requests/
$ rspec spec/

Rakeタスクでテスト全実行もできる

$ rake spec

さらにrakeのデフォルトはテスト実行なので、rakeだけでOK

$ rake