2016-02-15 93 views
2

我遇到了一個奇怪的問題。我試圖谷歌關於它,但我可能不會使用正確的措辭(我在RoR是很新的)。Rails的ActiveRecord ORDER BY不尊重嵌套包括

我通過我的模型之一的範圍使用一些嵌套的熱切加載。所以,我有這樣的事情:

scope :includes_all, lambda {includes(
    :buggy_relation, 
    :another_relation, 
    an_attribute: [:first_attribute, :second_attribute])} 

其中:buggy_relation被聲明爲在同一個模型是這樣的:

has_many :buggy_relation, -> {order(:order_index)}, class_name: 'SomeClass' 

所以,關鍵是,只要我沒有an_attribute在我的includes()聲明,SQL請求看起來是正確的,我可以看到ORDER BY語句在我的SomeClass.order_index上完成。但是,只要我用an_attribute: [:first_attribute, :second_attribute]添加嵌套加載,:buggy_relation的順序就不再考慮了。越野車的關係顯然是加載的,但沒有相應的ORDER BY聲明導致命令不被遵守。

不當行爲的一個例子是有一個博客帖子與評論:

#EXPECTED 
post -> comment 1 
    -> comment 2 
    -> comment 3 

#OBTAINED 
post -> comment 2 
    -> comment 3 
    -> comment 1 

如果您對此有任何提示...

回答

0

所以,你可以通過執行以下操作無論您在何處上市的評論

post.comments.order(:order_index).each do |comments| 
+0

是的,但這裏的想法是使用渴望加載。因此包括。事實上,只有當我添加這個嵌套的加載時,它纔會起作用。 訂單本身運作良好 –

+0

是的,但是當您在視圖中訂購時,它已經加載並且您可以訂購它 – Marcel

+0

我明白您的觀點並且您是對的。要點是,我主要不是尋找解決方法,我想了解我做錯了什麼,因爲迄今爲止我已經能夠閱讀的內容以及我用這個關係做的一些實驗,它應該__ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _工作。另外,如果要加載一個應該排序的關係(並且沒有嵌套屬性)並且必須重新排序,那麼我會有點難過,但這並沒有多大意義。但是,如果我的用例是不存在的,而且我完全錯了,那麼我肯定會執行你的建議。 –