![](/img/trans.png)
[英]How do I get the last SQL query performed by ActiveRecord in Ruby on Rails?
[英]How can I query a Ruby array, like I do with Rails ActiveRecord?
我有一張桌子,我們稱它為小部件。
我做了一些復雜的處理以獲得各種類型的小部件。 這些最終導致兩個不同的變量。
為了簡單起見,假設我們有...
widgetsA = Widget.where("blah blah blah")
widgetsB = Widget.where("blah blah blah blah")
我們仍然可以在widgetsA
和widgetsB
上執行widgetsA
函數,例如widgetsB
。
現在,在檢索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
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...
我看到兩個選擇:
1)在SQL中執行聯合:代替小部件widgetsA | widgetsB
返回數組的widgetsA | widgetsB
可以在數據庫中進行並集,因此結果仍然是一個關系對象:
Widget.from("(#{widgetA.to_sql} UNION #{widgetB.to_sql}) AS widgets")
2)使用常規數組方法。 你的例子:
widgetsAll = widgetsAll.order("RANDOM()")
widgetsAll = widgetsAll.where(answers_count: 0).limit(10) + widgetsAll.where("answers_count > 0").limit(10)
會翻譯成這樣的東西:
widgetsAll = widgetsAll.shuffle
widgetsAll = widgetsAll.select { |answer| widget.answer_count == 0 }.take(10) +
widgetsAll.select { |answer| widget.answers_count > 0).take(10)
閱讀有關Ruby數組的更多信息。
使用any_of寶石,您可以執行以下操作:
widgetsAll = Widget.where.any_of(widgetsA, widgetsB)
一種方法如下:
widgetsAllActual = Widget.where(id: widgetsAll)
這將創建一個新的Widget::ActiveRecord_Relation
集合,其中包含widgetsA
和widgetsB
中的所有元素,並允許進行進一步的活動記錄作用域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.