マスタとマスタを参照するレコード(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) =========================================