0

我有一个 Search 资源,它根据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 模型之间没有关联。我需要建造一个吗?如果是这样,怎么做?

4

1 回答 1

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 模型本身中。你能澄清一下,或者发布模型吗?

于 2012-09-04T16:05:38.837 回答