【发布时间】:2011-01-21 06:21:48
【问题描述】:
我的应用中有两个模型,笔记和亮点。它们的定义如下:
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-y。另外,我不知道如何区分哪些项目是笔记,哪些是亮点。另一种选择是分别获取注释流和突出显示流,然后合并数组。这似乎也很笨拙,而且我觉得我正在尝试做的事情必须在某个地方进行抽象。
我在这里缺少一些关键的 ActiveRecord 功能吗?最有效的方法是什么?
【问题讨论】:
标签: sql ruby-on-rails activerecord