SQL UNION с Rails ActiveRecord - PullRequest
       2

SQL UNION с Rails ActiveRecord

5 голосов
/ 21 января 2011

В моем приложении две модели: заметки и основные моменты.Они определены как:

class Note < ActiveRecord::Base
  belongs_to :user
end

class Highlight < ActiveRecord::Base
  has_and_belongs_to_many :users
end

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

SELECT book_id, page, content, created_at FROM `highlights` 
INNER JOIN `highlights_users` ON `highlights`.id = `highlights_users`.highlight_id 
WHERE (`highlights_users`.user_id = 1 ) 
UNION SELECT book_id, page, content, created_at FROM notes 
ORDER BY created_at DESC

Добавить, конечно, это работает, но не очень Rails-у.Кроме того, я не знаю, как определить, какие элементы являются заметками, а какие основными моментами.Другой вариант - получить поток заметок и выделить потоки отдельно, а затем объединить массивы.Это также кажется неуклюжим, и я чувствую, что где-то должна быть абстракция для того, что я пытаюсь сделать.

Есть ли какая-то ключевая функциональность ActiveRecord, которую я здесь упускаю?Какой самый эффективный способ сделать это?

1 Ответ

2 голосов
/ 21 января 2011

Наследование одной таблицы - это, вероятно, та абстракция, которую вы ищете.

http://ar.rubyonrails.org/classes/ActiveRecord/Base.html

http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html

http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...