我使用Rails 3和SQLite,我試圖做一個活動記錄查詢並同時使用來自另一個模型的信息排序結果。我有一個資源模型(屬於用戶)和一個shared_items模型來處理用戶彼此共享資源。我想創建一個用戶創建並與他們共享的所有資源的源。與工作查詢的資源模型:通過模型關聯排序的活動記錄查詢:Rails 3和SQLite
class Resource < ActiveRecord::Base
has_many :shared_items, :dependent => :destroy
default_scope :order => 'resources.shared_items.created_at DESC'
scope :from_users_sharing_with, lambda { |user| shared_with(user) }
private
def self.shared_with(user)
resource_ids = %(SELECT resource_id FROM shared_items WHERE shared_with_id = :user_id)
where("id IN (#{resource_ids}) OR user_id = :user_id",
{ :user_id => user })
end
此查詢創建已共享或創建的用戶的所有資源的一個很好的「喂」陣列,但它們是由資源下令創建日期,而非創作相應的shared_item的日期,這正是我期待做的。我如何在數據庫級別編寫排序?我認爲我可以在Ruby中進行排序(就像Ian建議的here),但由於我一次只想分頁讀取25條記錄,所以我不認爲我可以採用該選項。 任何想法讚賞。
我沒有測試過,但下面應該工作:'Resource.includes(:shared_item)。凡( 「?shared_items.shared_with_id = OR USER_ID =」,user.id,user.id).order( 「shared_items.created_at DESC」)' – rubish
感謝您的迴應。這個查詢將被放置而不是私有的'shared_with(user)'方法嗎?我把它放在那裏,我得到了異常 - 列名不明確:user_id:SELECT DISTINCT「resources」.id FROM「resources」LEFT OUTER JOIN「shared_items」ON「shared_items」。「」resource_id「=」resources「。」id「 WHERE(shared_items.shared_with_id = 1或user_id = 1)ORDER BY shared_items.created_at DESC LIMIT 30 OFFSET 0 – technix
將'user_id'更改爲'resources.user_id'以避免錯誤。 – rubish