Rails Rails 的一个坑 - order

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

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

共收到 16 条回复

神马意思?基于全面的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

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