如何生成的模型與這些協會:如何在rails4中創建關聯?
Owner
has_many dogs
Dog
belongs_to :owner, has_many :puppies
Puppy
belongs_to :dog
我想:
$ rails generate model Owner name:string
$ rails generate model Dog name:string owner_id:references
$ rails generate model Puppy name:string dog_id:references
,然後我這樣做:
class Owner < ActiveRecord::Base
has_many :dogs
end
class Dog < ActiveRecord::Base
belongs_to :owner
has_many :puppies
end
class Puppy < ActiveRecord::Base
belongs_to :dog
end
但是當我運行:
$ bundle exec rake db:migrate
我得到這個錯誤:
== CreateOwners: migrating ==================================================
-- create_table(:owners)
-> 0.0063s
== CreateOwners: migrated (0.0064s) =========================================
== CreateDogs: migrating ==============================================
-- create_table(:dogs)
rake aborted!
An error has occurred, this and all later migrations canceled:
wrong number of arguments (1 for 0)/Users/7stud/rails_projects/test1/db/migrate/20141011043159_create_dogs.rb:4:in `block in change'
...這裏是20141011043159_create_dogs.rb
class CreateDogs < ActiveRecord::Migration
def change
create_table :dogs do |t|
t.name :string
t.references :owner_id, index: true
t.timestamps
end
end
end
完整的錯誤消息:
~/rails_projects/test1$ rails generate model Owner name:string
invoke active_record
create db/migrate/20141011051648_create_owners.rb
create app/models/owner.rb
invoke test_unit
create test/models/owner_test.rb
create test/fixtures/owners.yml
~/rails_projects/test1$ rails generate model Dog name:string owner:references
invoke active_record
create db/migrate/20141011051712_create_dogs.rb
create app/models/dog.rb
invoke test_unit
create test/models/dog_test.rb
create test/fixtures/dogs.yml
~/rails_projects/test1$ rails generate model Puppy name:string dog:references
invoke active_record
create db/migrate/20141011051736_create_puppies.rb
create app/models/puppy.rb
invoke test_unit
create test/models/puppy_test.rb
create test/fixtures/puppies.yml
然後我編輯的模型是這樣的:
class Owner < ActiveRecord::Base
has_many :dogs
end
class Dog < ActiveRecord::Base
belongs_to :owner
has_many :puppies
end
class Puppy < ActiveRecord::Base
belongs_to :dog
end
~/rails_projects/test1$ bundle exec rake db:migrate
== CreateOwners: migrating ===================================================
-- create_table(:owners)
-> 0.0063s
== CreateOwners: migrated (0.0065s) ==========================================
== CreateDogs: migrating =====================================================
-- create_table(:dogs)
-> 0.0017s
== CreateDogs: migrated (0.0018s) ============================================
== CreatePuppies: migrating ==================================================
-- create_table(:puppies)
-> 0.0017s
== CreatePuppies: migrated (0.0019s) =========================================
Yeehaw!有效。
我刪除了模型和遷移,重建的機型,比如'$軌命令生成模型狗的名字:字符串業主:references'和我得到確切同樣的錯誤。 – 7stud 2014-10-11 04:57:21
在這裏工作就像一個魅力。試試anusha發佈的答案,這是您的移植和我的唯一區別。 – 2014-10-11 05:04:35
我甚至試着改變模型的名字,認爲可能有些東西我沒有正確刪除,而且我得到了完全相同的錯誤。我正在放棄過夜。 – 7stud 2014-10-11 05:11:17