マスタとマスタを参照するレコード(has_many belongs_to)

SyozokuとManagerを作成して1対Nの関連を作ってみる。

$ ruby script/generate model Syozoku
      exists  app/models/
      exists  test/unit/
      exists  test/fixtures/
      create  app/models/syozoku.rb
      create  test/unit/syozoku_test.rb
      create  test/fixtures/syozokus.yml
      exists  db/migrate
      create  db/migrate/002_create_syozokus.rb
$ ruby script/generate model Manager
      exists  app/models/
      exists  test/unit/
      exists  test/fixtures/
      create  app/models/manager.rb
      create  test/unit/manager_test.rb
      create  test/fixtures/managers.yml
      exists  db/migrate
      create  db/migrate/003_create_managers.rb
$ vi db/migrate/002_create_syozokus.rb
class CreateSyozokus < ActiveRecord::Migration
  def self.up
    create_table :syozokus do |t|
      # t.column :name, :string
      t.column :syozoku_name, :string
    end
  end

  def self.down
    drop_table :syozokus
  end
end

$ vi db/migrate/003_create_managers.rb
class CreateManagers < ActiveRecord::Migration
  def self.up
    create_table :managers do |t|
      # t.column :name, :string
      t.column :syozoku_id, :integer
      t.column :manager_name, :string
    end
    add_index :managers, :syozoku_id
  end

  def self.down
    drop_table :managers
  end
end

$ rake db:migrate
(in /home/kkijiya/RailsTest/accident)
== CreateSyozokus: migrating ==================================================
 -- create_table(:syozokus)
   -> 0.1681s
== CreateSyozokus: migrated (0.1683s) =========================================

== CreateManagers: migrating ==================================================
 -- create_table(:managers)
   -> 0.1690s
 -- add_index(:managers, :syozoku_id)
   -> 0.1497s
 == CreateManagers: migrated (0.3191s) =========================================

$ vi app/models/syozoku.rb
class Syozoku < ActiveRecord::Base
    has_many :managers
end

$ vi app/models/manager.rb
class Manager < ActiveRecord::Base
    belongs_to :syozoku
end
$ ruby script/generate scaffold Syozoku
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/syozokus
      exists  test/functional/
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
        skip    app/models/syozoku.rb
   identical    test/unit/syozoku_test.rb
   identical    test/fixtures/syozokus.yml
      create  app/views/syozokus/_form.rhtml
      create  app/views/syozokus/list.rhtml
      create  app/views/syozokus/show.rhtml
      create  app/views/syozokus/new.rhtml
      create  app/views/syozokus/edit.rhtml
      create  app/controllers/syozokus_controller.rb
      create  test/functional/syozokus_controller_test.rb
      create  app/helpers/syozokus_helper.rb
      create  app/views/layouts/syozokus.rhtml
   identical  public/stylesheets/scaffold.css
$ ruby script/generate scaffold Manager
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/managers
      exists  test/functional/
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
        skip    app/models/manager.rb
   identical    test/unit/manager_test.rb
   identical    test/fixtures/managers.yml
      create  app/views/managers/_form.rhtml
      create  app/views/managers/list.rhtml
      create  app/views/managers/show.rhtml
      create  app/views/managers/new.rhtml
      create  app/views/managers/edit.rhtml
      create  app/controllers/managers_controller.rb
      create  test/functional/managers_controller_test.rb
      create  app/helpers/managers_helper.rb
      create  app/views/layouts/managers.rhtml
   identical  public/stylesheets/scaffold.css

これで、画面を表示してみると、Syozokusは良い。項目が1つだけだから。
問題は、Managersに、Manager_nameしか入力項目がない!
ここからは、手作りになるのかなぁ?
ちょっと、気になったのでmanagerの内容を修正

class CreateManagers < ActiveRecord::Migration
  def self.up
    create_table :managers do |t|
      # t.column :name, :string
      t.column :syozoku, :integer
      t.column :manager_name, :string
    end
    add_index :managers, :syozoku
  end

  def self.down
    drop_table :managers
  end
end

(syozoku_idをsyozokuに変更。xxx_idは決まり事があったはず)
 <-でも色々やっているうちに結局、syozoku_idにもどすことなるのであった。後半を参照
で、ここで通常にrake db:migrateを実施しても何も変わらない!!!
色々悩んだ。で、バージョンを管理していることが判ったので、
db/schema.rb のVIERSIONを確認して、現在が=>3となっているので、

$ rake migrate VERSION=2
(in /home/kkijiya/RailsTest/accident)
== CreateManagers: reverting ==================================================
-- drop_table(:managers)
   -> 0.0005s
== CreateManagers: reverted (0.0007s) =========================================

[kkijiya@castor accident]$ rake db:migrate
(in /home/kkijiya/RailsTest/accident)
== CreateManagers: migrating ==================================================
-- create_table(:managers)
   -> 0.1843s
-- add_index(:managers, :syozoku)
   -> 0.1592s
== CreateManagers: migrated (0.3438s) =========================================