簡體   English   中英

如何像使用Rails ActiveRecord一樣查詢Ruby數組?

[英]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")

我們仍然可以在widgetsAwidgetsB上執行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表具有idnamedescription列。 最后,我們需要所有內容的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集合,其中包含widgetsAwidgetsB中的所有元素,並允許進行進一步的活動記錄作用域。

參考: https : //stackoverflow.com/a/24448317/429758

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM