1

Ceci est probablement très simple, mais je suis tout à fait nouveau pour ruby ​​et enregistrement actif.CSV à DataMapper Import

J'ai un vidage CSV d'une base de données que j'essaye d'importer dans une base de données en utilisant DataMapper. J'ai de la difficulté à comprendre quel type de relations je devrais définir dans les modèles afin qu'il corresponde à ce qui est défini dans le format CSV.

Voici les données que j'ai du CSV:

Stages: 
id 
staff_id 
project_id 
job_id 
company_id 

Projects: 
id 
company_id 

Jobs: 
id 
project_id 
company_id 

Client: 
id 

Staff: 
id 

Par exemple: faire les étapes belong_to projets ou est cette relation has_many?

+1

Utilisez-vous ActiveRecord ou DataMapper? (ce sont deux choses différentes) – mikej

+0

Désolé, j'utilise DataMapper, mais supposé que les types de relations sont similaires? par exemple. un à plusieurs etc – Tom

Répondre

1

Je suppose client == société. Voici un exemple pour ActiveRecord

class Stage < ActiveRecord::Base 
    belongs_to :staff 
    belongs_to :project 
    belongs_to :job 
    belongs_to :company, :class => "Client" 
end 

class Project < ActiveRecord::Base 
    belongs_to :company, :class => "Client" 
    has_many :stages 
end 

class Job < ActiveRecord::Base 
    belongs_to :project 
    belongs_to :company, :class => "Client" 
    has_many :stages 
end 

class Client < ActiveRecord::Base 
    has_many :jobs, :foreign_key => "company_id" 
    has_many :projects, :foreign_key => "company_id" 
    has_many :stages, :foreign_key => "company_id" 
end 

class Staff < ActiveRecord::Base 
    has_many :stages 
end 

Voici un exemple pour DataMapper:

class Stage 
    include DataMapper::Resource 
    property :id, Serial 
    belongs_to :staff 
    belongs_to :project 
    belongs_to :job 
    belongs_to :company, "Client" 
end 

class Project 
    include DataMapper::Resource 
    property :id, Serial 
    belongs_to :company, "Client" 
    has n, :stages 
end 

class Job 
    include DataMapper::Resource 
    property :id, Serial 
    belongs_to :project 
    belongs_to :company, "Client" 
    has n, :stages 
end 

class Client 
    include DataMapper::Resource 
    property :id, Serial 
    has n, :jobs, :foreign_key => "company_id" 
    has n, :projects, :foreign_key => "company_id" 
    has n, :stages, :foreign_key => "company_id" 
end 

class Staff 
    include DataMapper::Resource 
    property :id, Serial 
    has n, :stages 
end 

Pour l'importation, vous devez le faire dans un ordre spécial:

  1. Client, Staff, car ils peuvent exister indépendamment de tous les autres modèles
  2. Project, cela dépend uniquement de Client
  3. Job, dépend de Project et Client
  4. Stage, dépend de Staff, Project, Job et Client
+0

Je ne peux pas vous remercier assez. On dirait que le concept de foreign_key me manquait et j'ai fini par avoir plein de champs comme client_client_id. – Tom