1

ruby 中对空格有不同的敏感性/设置吗?

我有一个 RoR 项目,其中一个活动记录调用有很多组件:

    max_stuff = FooSummary.select("max(stuff) as stuff")
                        .joins(:foo => :bar)
                        .where("user_id = ? and record_date < ?", r.user_id, r.record_date)
                        .group("user_id")
                        .first

1.9.3 在我的 mac 上可以正常工作,但在它运行的 ubuntu 服务器上,它抱怨 .joins 在单独的行上(意外。期待 kEND)

是什么赋予了?

4

5 回答 5

8

这种语法是在 Ruby 1.9.1中引入的:

语言核心变化

  • 新的语法和语义
    • …</li>
    • 在三元冒号运算符 (:) 和方法调用点运算符 (.) 之前允许换行

很可能您的服务器运行的是较旧的 Ruby 版本,即 1.9.0 或 1.8.x。

于 2012-06-18T07:40:09.723 回答
5

将句点移到前一行。如果逐行解析,

foo = bar

看起来像一个完整的语句,而下一行单独来看是一个语法错误:

.baz

但是,这不能是一个声明:

foo = bar.

并且解析器知道它还必须附加下一行:

baz

foo = bar.baz(正如预期的那样,它给出了与 相同的解析)。

于 2012-06-18T06:42:44.650 回答
1

也许

max_stuff = FooSummary.select("max(stuff) as stuff") \
                    .joins(:foo => :bar) \
                    .where("user_id = ? and record_date < ?", r.user_id, r.record_date) \
                    .group("user_id") \
                    .first
于 2012-06-18T06:30:48.930 回答
0

在行尾加点

max_stuff = FooSummary.select("max(stuff) as stuff").
                       joins(:foo => :bar).
                       where("user_id = ? and record_date < ?", r.user_id, r.record_date).
                       group("user_id").
                       first
于 2012-06-18T08:10:19.663 回答
0

您还可以尝试以下的各种组合,或者(结束行,或者)开始行。在这里,我将两者都显示,您可以根据自己的喜好进行调整。

max_stuff = FooSummary.select(
                              "max(stuff) as stuff"
                     ).joins(
                             :foo => :bar
                     ).where(
                             "user_id = ? and record_date < ?", r.user_id, r.record_date
                     ).group(
                             "user_id"
                     ).first
于 2012-06-18T06:48:55.287 回答