railstutorial.jp 5章メモ
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