我有一个搜索资源,可根据Railscast111中所述的过滤器返回帖子,并具有以下代码:
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模型之间没有关联。我需要建一个吗?如果是这样,怎么样?
答案 0 :(得分: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
另外,我不太确定搜索资源的含义,当(至少在这种情况下)出现时,您可以将搜索逻辑保留在Post模型本身中。你可以澄清,或者发布模型吗?