我似乎无法使用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) 为了更简洁地写,而不是这样做:
test_value = method_call_that_might_return_nil()
if test_value
do_something_with test_value
end
Run Code Online (Sandbox Code Playgroud)
我一直在条件中分配:
if test_value = method_call_that_might_return_nil()
do_something_with test_value
end
Run Code Online (Sandbox Code Playgroud)
这是不好的风格?更简洁的语法:
do_something_with test_value if test_value = method_call_that_might_return_nil()
Run Code Online (Sandbox Code Playgroud)
根据Matz(http://redmine.ruby-lang.org/issues/show/1141),正如另一个SO问题所讨论的那样,不允许在1.9中保持这种状态.
鉴于分配和比较可能混淆,这是否使得阅读代码变得太难?
我的网络应用程序以UTC为单位存储所有时间戳,没有时区.我有一个shell/psql脚本,它返回最近登录的列表,我希望该脚本在服务器的本地时区显示登录时间(这可能因服务器的位置和夏令时而异).
要获得表示我的数据库服务器的时区和UTC之间的差异的间隔,我目前正在使用此hack:
SELECT age(now() at time zone 'UTC', now());
Run Code Online (Sandbox Code Playgroud)
这是有效的,但是有更简单的方法吗?
有一个名为"timezone"的服务器配置参数返回一个有效的时区字符串,但我认为不可能在查询中访问这些参数.(我想这是一个单独的问题,但是它的答案可以解决时区问题.)