DataMapper: множественные отношения «есть и принадлежат многим» между одними и теми же моделями? - PullRequest
1 голос
/ 29 марта 2012

Как мне установить несколько связей типа has n, :through => Resource между одними и теми же моделями с DataMapper?

Например, в новостной CMS у меня будет что-то вроде этого:

class User
  include DataMapper::Resource

  has n, :written_articles, 'Article', :through => Resource
  has n, :edited_articles, 'Article', :through => Resource

  property :name, String # etc.
end

class Article
  include DataMapper::Resource

  has n, :authors, 'User', :through => Resource
  has n, :editors, 'User', :through => Resource

  property :title, String # etc.
end

Однако это не работает. В базе данных есть только одна таблица отношений, в которой для каждого отношения должны быть указаны автор и редактор, что даже не имеет смысла.

Как я могу сделать что-то подобное?

1 Ответ

1 голос
/ 29 марта 2012

Вы не можете сделать это с помощью анонимного ресурса - предоставленный вами код создаст одну реляционную модель UserArticle, которая не может обрабатывать два отношения «многие ко многим» (по крайней мере, автоматически).Для этого вам нужно создать отдельную явную реляционную модель, например ArticleEditor.

class ArticleEditor
  include DataMapper::Resource

  belongs_to :article,   :key => true
  belongs_to :user, :key => true
end

и в состоянии вашей модели

 has n, :article_editors
 has n, :editors (or :edited_articles), :through => :article_editors
...