Как создать модели с этими ассоциациями:Как создать ассоциации в 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
Работал как очарование здесь. Попробуйте ответить, отправленный anusha, что является единственной разницей между вашей миграцией и моей. –
Я даже пытался изменить имена моделей, думая, что может быть что-то, что я не удалял должным образом, и получаю точно такую же ошибку. Я ухожу на ночь. – 7stud