相关疑难解决方法(0)

Rails Active Record查找(:all,:order =>)问题

我似乎无法使用ActiveRecord :: Base.find选项:一次订购多个列.

例如,我有一个带有日期和参加列的"显示"模型.

如果我运行以下代码:

@shows = Show.find(:all, :order => "date")
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

[#<Show id: 7, date: "2009-04-18", attending: 2>, 
 #<Show id: 1, date: "2009-04-18", attending: 78>, 
 #<Show id: 2, date: "2009-04-19", attending: 91>, 
 #<Show id: 3, date: "2009-04-20", attending: 16>,
 #<Show id: 4, date: "2009-04-21", attending: 136>]
Run Code Online (Sandbox Code Playgroud)

如果我运行以下代码:

@shows = Show.find(:all, :order => "attending DESC")

[#<Show id: 4, date: "2009-04-21", attending: 136>,
 #<Show id: 2, date: "2009-04-19", attending: 91>,
 #<Show id: 1, date: "2009-04-18", attending: 78>,
 #<Show id: 3, date: …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails

76
推荐指数
3
解决办法
15万
查看次数

Sqlite3 activerecord:order =>"time DESC"不排序

rails 2.3.4,sqlite3

我正在尝试这个

Production.find(:all,:conditions => ["time>?",start_time.utc],:order =>"time DESC",:limit => 100)

条件完美的作品,但我在使用的问题:为了=>时间DESC.

偶然的机会,我发现它在Heroku(用heroku控制台测试)上运行,它运行PostgreSQL.但是,在本地,使用sqlite3,新条目将在旧条目之后排序,无论我设置的时间如何.像这样(输出已被手动剥离):第二个条目是新的:

生产编号:2053939460,时间:"2010-04-24 23:00:04",created_at:"2010-04-24 23:00:05"

制作编号:2053939532,时间:"2010-04-25 10:00:00",created_at:"2010-04-27 05:58:30"

生产编号:2053939461,时间:"2010-04-25 00:00:04",created_at:"2010-04-25 00:00:04"

生产编号:2053939463,时间:"2010-04-25 01:00:04",created_at:"2010-04-25 01:00:04"

似乎它对主键,id,而不是时间进行排序.请注意,查询在heroku上运行正常,返回正确排序的列表!我喜欢sqlite,它是如此亲吻,我希望你能帮助我......

有什么建议?


UPDATE/SOLVED: time是一个保留的sqlite3关键字(日期,其中也是如此).这就是为什么:order => 'time DESC'在PostgreSQL(非保留关键字)中工作,而不是在sqlite3中.解决方案是避免将sqlite3关键字用作列名,如果您打算对它们进行排序的话.重命名解决了这个问题.

我已经使用标准的rails模式updated_atcreated_at进行了测试,结果很好.

我仍然喜欢开发中的sqlite3,使用起来非常简单顺畅,复制数据库并发送给你的合作伙伴.感谢@newtover!

sqlite ruby-on-rails reserved-words

4
推荐指数
1
解决办法
4814
查看次数