HABTM отношения с массивом - PullRequest
2 голосов
/ 05 января 2011

Я новичок в программировании на Rails 3, и у меня есть одна проблема с созданием правильной модели.

Допустим, есть приложение для управления библиографией книги, которое управляет отображением для каждой главы.из списка ссылочных статей.Так что для части статьи у меня может быть что-то вроде:

create_table :articles do |t|
  t.string :title
  t.text   :content
  ...

В библиографической части я хотел бы иметь такую ​​модель, как

create_table :bibliographies do |t|
  t.string :chapter
  t.text   :ref
  ...

, где ref - это массивссылки на статьи, поэтому управление им будет осуществляться с помощью serialize метода ActiveRecord.

Хорошо, так что теперь вопрос в том, как сделать так, чтобы элементы массива @bibliography.ref были ссылками (в смысле Ruby)на несколько article_id.

Как мне смоделировать такие отношения, и какой код на Rails 3 я должен написать, чтобы выразить это?Меня смущает то, что одно поле одного экземпляра @bibliography будет ссылаться на многие @ article.id.

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 05 января 2011

Если вы действительно хотите хранить такие отношения, я бы определил метод в библиографической модели, что-то вроде этого

(при условии, что ref является массивом идентификаторов)

def articles
  Article.where(:id => self.ref)
end

Я бы сохранил отношения иначе. Добавьте третью таблицу / модель article_bibliographies с полями article_id и bibliography_id. Затем вы можете использовать ассоциацию has_many: through, встроенную в ActiveRecord.

в вашем классе библиографии у вас будет что-то вроде:

has_many :articles_bibliographies
has_many :articles, :through => :articles_bibliographies

тогда вы можете просто сделать @ bibliography.articles

Подробнее здесь http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

0 голосов
/ 09 января 2011

Следуя совету egze, я нашел способ решить мою проблему (без использования массивов!).Итак, я создаю отношение has_many-through, но, поскольку я хочу сохранить порядок статей, как они упоминаются в библиографии, таблица article_bibliographies также имеет поле order_nr, где я храню первое, второе и т. Д.статья, упомянутая в библиографии:

create_table :articles_bibliographies do |t|
   t.references  :article
   t.references  :bibliography
   t.integer     :order_nr

Таким образом, я могу получить и показать упорядоченный список элементов с помощью:

@bibliography.articles.order("order_nr ASC")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...