2012-09-04 86 views
0

我在Railscast111描述返回基於一個過濾器職位搜索資源的屬性設置default_scope秩序,有下面的代碼:如何從另一非關聯模型

def filter_posts 
    posts = Post.order('created_at DESC')  
    posts = posts.where("name ilike ?", "%#{keywords}%") 
    posts = posts.where(... #numerous other filters 
    posts 
end 

過濾器本身似乎工作精細。但是,內容並不總是按照「created_at DESC」的順序返回。我如何對最終輸出進行排序,以便始終按照「created_at DESC」的順序排列?目前,Post和Search模型之間沒有關聯。我需要建立一個嗎?如果是這樣,怎麼樣?

回答

1

你是否嘗試過將這兩個條件鏈接在一起?

posts = Post.where("name like?", "%#{keywords}%").order('created_at DESC') 

取決於你有多少個過濾器結束通話,你需要不斷更新你原來的結果,用更新的範圍(根據您的過濾器),因爲它創建了一個新的領域,你每次都使用,而不是調整原來的。所以,你似乎是在正確的道路上,你原來的代碼是這種情況,如

posts = Post.where("filter1") 
posts = posts.where("filter2") 

你試過後排序所有過濾器已經應用,所以像

posts = posts.order('created_at DESC') 

posts = posts.sort_by &:created_at 

而且,我真的不知道你用的搜索資源,當(至少在這種情況下),看來你可以保持內部的搜索邏輯是什麼意思郵政模式本身。你能澄清,還是張貼模型?

+0

謝謝@ply。問題是,如果我用兩個過濾器搜索,那麼兩個過濾器中的每一個都將按「created_at」排序,但最終輸出將顯示(過濾器1的結果由「created_at」排序),其次是(過濾器2的結果排序所以,我正在尋找一種方法來排序最終的輸出(而不是對每個單獨的組件過濾器進行排序)。關於我的搜索模型,它包含了上面的定義,它定義了一個定義''posts''這是'@posts || = filter_posts',並允許將搜索結果保存到模型中 – umezo

+0

啊,謝謝澄清,它是一個完全獨立的模型(例如Search.rb),或者是你的Posts控制器中的Search _action? – ply

+0

嗨@ply它是完全獨立的模型,有自己的控制器和視圖文件。 – umezo

相關問題