Как связать несколько моделей с одной моделью, которая будет управлять ими в Rails? - PullRequest
2 голосов
/ 24 марта 2009

Допустим, у меня есть четыре полностью независимых модели (Movie, Book, Game, Album), которые управляют типами вещей, которые есть в моей медиаколлекции. С их помощью я могу CRUD и отмечать отдельные альбомы, фильмы и т. Д.

Но мне нужно следить и делать некоторые вещи, которые являются общими для всех них. Поэтому я решил, что мне нужна модель Item, которая выдала бы мне таблицу item, например:

| id | item_id | item_type | status | possession |
+----+---------+-----------+--------+------------+
| 01 |    01   |     1     |    3   |     2      |  

Где биты status и possession позволяют мне отслеживать, является ли предмет новым или использованным, со мной или одолженным (кому в другой таблице) и т. Д., И сама таблица сообщит мне сколько предметов у меня всего. Все, не касаясь оригинальных четырех моделей и их объектов, которые, я думаю, должны иметь только информацию о том, что они из себя представляют, а не о том, что я могу с ними сделать. РЕДАКТИРОВАТЬ: Обратите внимание, что каждый раз, когда добавляется фильм или книга, он также должен обновлять таблицу items с соответствующей информацией.

Я новичок, и у меня были некоторые идеи, как это сделать, но ни одна из них не оказалась успешной. Я знаю, это много, чтобы спросить, но я хотел бы знать, как я могу это сделать?

Любая помощь будет оценена, спасибо.

Ответы [ 4 ]

5 голосов
/ 24 марта 2009

Самый простой способ сделать это - использовать полиморфную ассоциацию .

4 голосов
/ 24 марта 2009
2 голосов
/ 24 марта 2009

Наследование в Rails (на мой взгляд) оставляет желать лучшего, так как допускает только наследование одной таблицы.

То, что я хотел бы сделать, - это связать каждую вашу модель (фильм, книгу и т. Д.) С предметом в соотношении 1: 1.

class Book < ActiveRecord::Base
  belongs_to :item
end

Редактировать : Взглянув на полиморфные вещи (если честно, я кое-что забыл о Rails), я думаю, что это может быть больше, чем вы ищете. Мой способ работал бы, но я думаю, что другой путь работал бы лучше.

0 голосов
/ 24 марта 2009

быстрые комментарии к именам атрибутов ...

"Статус" ИМХО ужасен. Может быть "Тип приобретения".

«Тип элемента» не так уж плох, но «Тип носителя» может быть более подходящим.

Вот очень всеобъемлющее "современное" руководство по соглашениям об именах сущностей, которое стоило бы хотя бы просмотреть. http://www.uscg.mil/directives/ci/5000-5999/CI_5230_42A.pdf

...