『はじめる!Rails3 (1)』をRails 3.1で読み進めるときのポイント その2

前回の続き。『はじめる!Rails3(1)』(黒田努 著 / 達人出版会)をRails 3.1で読む場合のポイントについて。

7.3 スタイルシートの作成

書籍では public/stylesheetstasks.css を作成するように記述されているが、これも前回の画像ファイルと同じで assets/stylesheets に配置する。また、tasks.css を自分で作成するのではなく、既に用意されている tasks.css.scss に記述する。

scss (Sassy CSS)は、CSSの文法に限りなく近づけつつ新たな文法を導入して拡張したもの。Rails 3.1から標準で入った。

CSSと互換性があるため、書籍の記述の通りに

table.tasks {
  width: 560px;
  margin: 5px auto;
  background-color: #eee;
  border-collapse: collapse;
  border-spacing: 0;
}

table.tasks tr {
  border: solid 1px #ccc;
}

table.tasks td {
  padding: 5px;
}

table.tasks col.name {
  width: 320px;
}

table.tasks col.due_date {
  background-color: #ddd;
}

とも書けるが、次のように書く事もできる。

table.tasks {
  width: 560px;
  margin: 5px auto;
  background-color: #eee;
  border-collapse: collapse;
  border-spacing: 0;

  tr {
    border: solid 1px #ccc;
  }
  td {
    padding: 5px;
  }
  col.name {
    width: 320px;
  }
  col.due_date {
    background-color: #ddd;
  }
}

table.tasksの中にネストする事で冗長な記述を省略でき、少しスッキリする。

ここまでのポイントで、Rails 3.1を使用した場合もとりあえずエラーが出ずに進められるはず。

『はじめる!Rails3 (1)』をRails 3.1で読み進めるときのポイント その1

『はじめる!Rails3(1)』(黒田努 著 / 達人出版会)はRails3.0をベースに記述されている為、3.1環境でチュートリアルを進めていくと何点かつまずくポイントがある。自分用のメモとして記述しておく。

2.3 Ruby on Railsのインストール

以下のコマンドでrailsをインストールするが、1行だけエラーが出た。

$ gem install rails

とすると、結果ログに1行

$ file 'lib' not found

と表示される。
これは、以下の方法で解決できる・・・らしい。が、今回はスルーして先に進めた。得に問題は起こっていないので、スルーでも大丈夫だと思われる。

特にそのままでも問題もなさそうだったけれど、気になったので調べてみた。
そしたらlibディレクトリを作ったら無事解決しました。

cd /usr/local/lib/ruby/gems/1.9.1/gems/rails-3.0.5
sudo mkdir lib
sudo gem install rails

NS2とかLinuxのブログ : gem install railsでFile not found: lib

5.5 部分テンプレート

webアプリのロゴ画像を表示する部分。画像ファイルを public/images ディレクトリ配下に置くように指定されるが、ここにおいても表示されない。

これはRails 3.1からAsset Pipelineという仕組みが導入された為で、public/imagesではなく、assets/imagesに配置する。JavaScriptやStylesheetも同様で、それぞれassets/javascriptsassets/stylesheetsに配置する。

6.2 マイグレーション

新しくテーブルを作成するマイグレーションスクリプトについて。書籍内では以下のようにself.upとself.downが定義されている。

Class CreateTasks <ActiveRecord::Migration
  def self.up
    create_table :tasks do |t|
      t.string :name
      t.text :description
      t.date :due_date
      t.boolean :done

      t.timestamps
    end
  end

  def self.down
    drop_table :tasks
  end
end

Rails3.1からはこれが変更になり、upとdownをまとめてchangeメソッドで記述するようになった。以下のように書く。

Class CreateTasks <ActiveRecord::Migration
  def change
    create_table :tasks do |t|
      t.string :name
      t.text :description
      t.date :due_date
      t.boolean :done

      t.timestamps
    end
  end
end

selfが抜けてインスタンスメソッドになっている点に注意。

次回へ続く