朝練メモ

chapter 5 で user な controller は作成したので chapter 6 では model を作るのかどうなのか。流して読みつつとりあえず以下とのこと。

$ git checkout master
$ git checkout -b modeling-users

で、書いてあることをなんとなく読みつつ以下とのこと。

$ rails generate model User name:string email:string
      invoke  active_record
      create    db/migrate/20110913233346_create_users.rb
      create    app/models/user.rb
      invoke    rspec
      create      spec/models/user_spec.rb
$

作成されたナニの中身を見てみます。

$ cat app/models/user.rb 
class User < ActiveRecord::Base
end
$ cat db/migrate/20110913233346_create_users.rb 
class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end

  def self.down
    drop_table :users
  end
end
$

コマンドに渡した属性な情報は db/migrate のためだったのかな。
次に Gemfile を以下に、との指示がナニ。

group :development do
  gem 'rspec-rails', '2.6.1'
  gem 'annotate', '2.4.0'
end

で、Gemfile を上書き保存して bundle install して

$ bundle install
Fetching source index for http://rubygems.org/
//snip
Installing annotate (2.4.0) 
//snip
$

annotate を exec しなさいとのこと。

$ bundle exec annotate --position before
Unable to annotate user.rb: #<ActiveRecord::StatementInvalid: Could not find table 'users'>

Nothing annotated.
$

あ、db:migrate してない。

$ bundle exec rake db:migrate
==  CreateUsers: migrating ====================================================
-- create_table(:users)
   -> 0.0018s
==  CreateUsers: migrated (0.0019s) ===========================================

$

で、リトライ。

$ bundle exec annotate --position before
Annotated (1): User
$

以下な形になりました。

$ cat app/models/user.rb 
# == Schema Information
#
# Table name: users
#
#  id         :integer         not null, primary key
#  name       :string(255)
#  email      :string(255)
#  created_at :datetime
#  updated_at :datetime
#

class User < ActiveRecord::Base
end
$

あとは attr_accessible メソドの呼び出しを追加ですか。

class User < ActiveRecord::Base
  attr_accessible :name, :email
end

で、コンソールから model 作成して云々してますが、ここではスルー。

6.2 User validations

どこまでイケるのか。てか、いきなり出てきた以下が意味不明。

$ bundle exec rake db:test:prepare
  • ちゃんと本文読まなきゃorz
  • これで development な db の修正が test に反映される、のかなぁ。微妙に謎。実行してもだんまりだし。
  • pending というメソド興味深い

とりあえず時間切れ。夜に対応できたら追記を予定。