如何在另一个非关联模型的属性上设置default_scope顺序

时间:2012-09-04 15:45:33

标签: ruby-on-rails sorting

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

1 个答案:

答案 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模型本身中。你可以澄清,或者发布模型吗?