2010-07-01 5 views
0

Je ne fais que commencer à utiliser les associations DataMappers, juste pour tester les choses ont une structure de table très simple, et il est borking.Associations DataMapper, code simple, ne fonctionne pas

require 'dm-core' 
require 'dm-migrations' 

DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/dbtest.db") 

    class Account 
     include DataMapper::Resource 
     property :id, Serial 
     has 1, :userprofile, :model =>"UserProfile" 
    end 

    class UserProfile 
     include DataMapper::Resource 
     property :id, Serial 
     belongs_to :Account 
    end 
DataMapper.finalize #whether I have this before or after auto migrate the result is the same 
DataMapper.auto_migrate! 

Cela devrait simplement fonctionner, sympa et simple, DM fonctionne pour tout le reste (je l'ai déjà beaucoup utilisé).

Voici le résultat quand je lance ce code, quelqu'un sait ce que le problème est ?:

DataObjects::SyntaxError: duplicate column name: account_id (code: 1, sql state: , query: CREATE TABLE "user_profiles" ("id" INTEGER NOT NULL PRIMARY 
KEY AUTOINCREMENT, "account_id" INTEGER NOT NULL, "account_id" INTEGER NOT NULL), uri: sqlite3://d/Borrow/dbtest.db) 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/adapters/dm-do-adapter.rb:92:in `execute_non_query' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/adapters/dm-do-adapter.rb:92:in `create_model_storage' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/adapters/dm-do-adapter.rb:90:in `each' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/adapters/dm-do-adapter.rb:90:in `create_model_storage' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-do-adapter-1.0.0/lib/dm-do-adapter/adapter.rb:260:in `with_connection' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/adapters/dm-do-adapter.rb:85:in `create_model_storage' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/auto_migration.rb:79:in `create_model_storage' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/auto_migration.rb:175:in `auto_migrate_up!' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/auto_migration.rb:130:in `auto_migrate!' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/auto_migration.rb:45:in `send' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/auto_migration.rb:45:in `repository_execute' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/model/descendant_set.rb:33:in `each' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-core-1.0.0/lib/dm-core/model/descendant_set.rb:33:in `each' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/auto_migration.rb:44:in `repository_execute' 
     from d:/Ruby/lib/ruby/gems/1.8/gems/dm-migrations-1.0.0/lib/dm-migrations/auto_migration.rb:22:in `auto_migrate!' 

Répondre

3

Dans UserProfile, essayez de spécifier un minuscule :account, comme ceci:

belongs_to :account 

En outre, si vous suivez la convention en ajoutant un trait de soulignement dans la relation :user_profile dans Account,

has 1, :user_profile 

vous pouvez supprimer la clé :model.

Questions connexes