【发布时间】:2015-08-08 19:04:39
【问题描述】:
我有一张桌子,我们称之为 Widget。
我做了一些复杂的处理来获得各种类型的小部件。它们最终形成两个不同的变量。
为了简单起见,假设我们有...
widgetsA = Widget.where("blah blah blah")
widgetsB = Widget.where("blah blah blah blah")
我们仍然可以在widgetsA 和widgetsB 上执行像.where 这样的ActiveRecord 函数。
现在,在检索到 A 和 B 的集合后,我需要合并它们,然后对它们执行额外的 ActiveRecord 函数。
我想做这样的事情......
widgetsAll = widgetsA | widgetsB
widgetsAll = widgetsAll.order("RANDOM()")
widgetsAll = widgetsAll.where(answers_count: 0).limit(10) + widgetsAll.where("answers_count > 0").limit(10)
这将获取在 A 和 B 中找到的所有小部件(联合),将它们随机化,然后选择 10 个有答案和 10 个没有答案。
问题是,我不能使用 .order 并且 widgetsAll 不再是 ActiveRecord 对象,但由于 widgetsAll = widgetsA | widgetsB 行,它是一个数组。我该怎么做
A) 将两个 ActiveRecord 集合并集/相交,形成一个 ActiveRecord 集合
B) 如何对数组进行排序和执行“where”样式查询。
两者都可以解决问题。我认为 B 的性能要好一些,所以我认为这将是更好的答案。
有什么想法吗?
最后,假设 Widget 表包含 id、name、description 列。最后,我们想要所有内容的 ActiveRecord 或 Array(可能是首选)。
编辑:(尝试通过 SQL UNION 合并...但不工作)
w1 = Widget.where("id = 1 OR id = 2")
w2 = Widget.where("id = 2 OR id = 3")
w3 = Widget.from("(#{w1.to_sql} UNION #{w2.to_sql})")
PG::SyntaxError: ERROR: subquery in FROM must have an alias
LINE 1: SELECT "widgets".* FROM (SELECT "widgets".* FROM "widge...
【问题讨论】:
标签: ruby-on-rails ruby activerecord