2011-04-18 79 views
4

什麼是最好的方式,使用ActiveRecord,執行以下SQL:Rails的:ActiveRecord的 - 自定義SQL

SELECT parent.* 
FROM sections AS node, sections AS parent 
WHERE node.left BETWEEN parent.left AND parent.right 
ORDER BY parent.left DESC 
LIMIT 1 

我知道可以使用.limit()。凡()和.order( )但你如何處理'來自'? 或者更好的做法是將整批作爲一個單獨的陳述來執行?

感謝您的任何幫助。

回答

2

在應用程序中使用SQL沒有任何問題,只要您可以驗證它是否正常工作並且不會將您暴露給注入攻擊。由於這個陳述是按照原樣執行的,所以在這方面你沒問題。

ActiveRecord::Base.connection提供了執行任意查詢和以多種格式檢索結果的方法。 select_allselect_rows可能是你要找的。

AREL查詢生成器並不總是像我們想的那樣聰明,所以如有疑問,請使用最簡單的表達形式。在你的情況下,它似乎是SQL的大塊。

要使用AREL重新編寫它,您必須使用join方法將其重新鏈接。

1
Parent.from('sections AS node, sections AS parent') 
.where('node.left BETWEEN parent.left AND parent.right') 
.order('parent.left DESC') 
.limit(1) 

而且你得到了鏈接的好處。

相關問題