Rails Rails 的一个坑 - order

linjunhalida · 2013年06月09日 · 最后由 zhangjinzhu 回复于 2013年06月11日 · 3287 次阅读

发现调用了 order 之后,再调用的话是基于前面的 order 前提之下再排序, 如果需要改变 order,需要用reorder,没有找到相关文档,看了源码才知道还有 reorder 这回事,大家是不是也遇到过同样类似的坑?比如after_create返回值那个?可以分享一下~

神马意思?基于全面的 order 前提下再排序 会不一样吗?

@ChanceDoor 对的,比如:Idea.where('').order('id desc').order('updated_at desc').first.title生成的 sql:

SELECT ideas.* FROM ideas ORDER BY id desc, updated_at desc LIMIT 1

#2 楼 @linjunhalida 可是为什么要写俩 order 呢?好吧 以后要是遇到就知道了

我觉得这个很合理啊,你链式调用两个 where 方法不是也会组合生成 SQL 条件嘛

不过你说的 reorder 方法文档上没有倒是挺奇怪的,可能他们觉得这种需求很偏所以就。。。

#6 楼 @Rei 哈,我是翻了源码才发现的,没有想到文档里面有。

order 和 where 可以叠加,limit 不可以。Rails 的做法一点问题没有呀

这为啥是坑,很合理啊

同意楼上,很合理。基本没有使用到两个 order,一般都直接放在一个里面。

User.where(:id => [1,2]).where(:id => [2,3])

猜猜结果是啥。。。

#11 楼 @zhangjinzhu "SELECT users.* FROM users WHERE users.id IN (1, 2) AND users.id IN (2, 3)"

@Victor 可能是版本原因,在我这里是 ...

SELECT users.* FROM users WHERE users.id IN (2, 3)

rails guide 上应该讲过

用的 3.1 测试的 @Victor

需要 登录 后方可回复, 如果你还没有账号请 注册新账号