Импорт 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

Например: этапы принадлежат проектам или это отношения has_many?


person Tom    schedule 20.06.2010    source источник
comment
Вы используете ActiveRecord или DataMapper? (это 2 разные вещи)   -  person mikej    schedule 20.06.2010
comment
Извините, я использую DataMapper, но предположил, что типы отношений похожи? например один ко многим и т.д.   -  person Tom    schedule 20.06.2010


Ответы (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. Client, Staff, потому что они могут существовать независимо от всех других моделей
  2. Project, это зависит только от Client
  3. Job, зависит от Project и Client
  4. Stage, зависит от Staff, Project, Job и Client
person jigfox    schedule 20.06.2010
comment
Я не могу отблагодарить вас достаточно. Похоже, мне не хватало концепции внешнего_ключа, и в итоге я получил множество полей, таких как client_client_id. - person Tom; 21.06.2010