Самое простое решение - наследовать модели от одной и хранить ее в одной таблице.Однако очень плохо, если у вас есть существующая схема или модели сильно отличаются.
Другое (и я думаю, гораздо лучшее) решение (если ваша база данных позволяет это) - использовать UNION в вашем SQL для получения результатов изнесколько столов.В этом случае вы должны использовать find_by_sql
.
Например, если у вас есть модели Post
и Question
и вы хотите перечислить обе в один список (и отфильтровать их по некоторым условиям, возможно), вам следует:
Добавить поле type
к каждой таблице со значением по умолчанию, соответствующим названию модели.Например:
create_table :questions do |t|
t.text :text
t.string :type, :null => false, :default => 'Question'
t.timestamps
end
Запросите обе модели следующим образом:
Post.find_by_sql("SELECT id,type,created_at,updated_at,title,description,NULL AS text FROM posts
UNION SELECT id,type,created_at,updated_at,NULL as title, NULL AS description, text FROM questions
ORDER BY created_at DESC")
Использование type
поля Rails будет различать разные модели ивозвратите список сообщений и вопросов, так что вы можете искать (или разбивать на страницы) оба.