2010-09-22 1 views
1

Я занят созданием рубинов на рельсах.подмодель, подкласс или субконтроллер рубин на рельсах ссылки

Я хочу создать модель, которая содержит текстовую модель, модель изображения и модель ссылок. Каждая модель может иметь комментарии, но я не хочу создавать разные модели комментариев для модели текста, изображения и ссылки. Возможно ли, чтобы модель мультимедиа имела подкласс (или как он называется) aka: модель изображения, текстовая модель и модель ссылок. Или есть другой чистый способ сделать это. Thanks

ответ

2

Вы можете создать комментарий модель, которая имеет polymorphic association:

# Comment model 
belongs_to :commentable, :polymorphic => true 

# Other model that should has comments 
has_many :comments, :as => :commentable 

Вы можете добавить выше линии к каждой модели, которая нуждается в комментарии. Для того, чтобы иметь полиморфный ассоциацию вам нужно иметь эти столбцы в таблице комментариев в БД:

commentable_id - int 
commentable_type - string 

Вы можете также использовать некоторые плагин для комментариев, на примере this.

+0

Можно ли удалить commentable_type в базе данных (я не буду использовать @ comment.text, @ comment.picture, @ comment.link)? – kaibakker

+0

@kaibakker: если у вас есть 3 разных модели для текста, изображения и ссылки каждый со своим идентификатором, тогда вам нужно иметь 'commentable_type', потому что вам нужно знать, к какой модели относится этот комментарий. Вы можете иметь только 'comment_id', если вы это сделаете так, как предлагал @corroded - так что только одна таблица в db для 3 моделей, которые наследуются от модели« Media ». – klew

+0

Спасибо, это был глупый вопрос! – kaibakker

0

Вы на правильном пути. У вас может быть мультимедийная модель, которая имеет несколько комментариев. Затем вы можете сделать расширяет медиа в вашей картинке, Link и моделей Текст

0

Невозможно добавить для evert type media новую таблицу базы данных с комментариями, text_comment, picture_comment и link_comment. они могут быть сделаны во время миграции, единственная проблема заключается в том, как я могу вызвать информацию из этих баз данных?

Смежные вопросы