1

这可能很简单,但我对Ruby和活动记录颇为陌生。CSV到DataMapper导入

我有一个数据库的CSV转储,我试图使用DataMapper导入到数据库。我无法理解我应该在模型中定义哪种类型的关系,以便它与所定义的CSV匹配。

下面是我从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 

例如:做阶段belong_to项目或者是这个的has_many关系?

+1

? (这些是2种不同的东西) – mikej 2010-06-20 18:56:13

+0

对不起,我使用的是DataMapper,但假设关系类型相似?例如一对多等 – Tom 2010-06-20 19:50:22

回答

1

我假设客户==公司。这里的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 

这里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 

对于你应该做一个特殊的顺序导入:

  1. ClientStaff,因为他们可以存在独立于所有其他型号
  2. Project,它仅取决于Client
  3. Job,取决于ProjectClient
  4. Stage,您使用的ActiveRecord或者DataMapper的取决于StaffProjectJobClient
+0

我不能够感谢你。看起来我错过了foreign_key的概念,并以client_client_id等很多字段结束。 – Tom 2010-06-21 12:28:39