2012-09-04 56 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

相关问题