红宝石空白

时间:2012-06-18 06:28:48

标签: ruby ruby-on-rails-3

红宝石中的空格有不同的敏感度/设置吗?

我有一个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)

是什么给了什么?

5 个答案:

答案 0 :(得分:8)

这个语法在Ruby 1.9.1中是introduced

  

语言核心更改

     
      
  • 新语法和语义   
        
    • ...
    •   
    • 在三元冒号运算符(:)和方法调用点运算符(。)
    • 之前允许使用换行符   
  •   

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

答案 1 :(得分:5)

将句点移至上一行。如果逐行解析,

foo = bar

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

.baz

然而,这不能是一个声明:

foo = bar.

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

baz

(它提供与foo = bar.baz相同的解析,如预期的那样)。

答案 2 :(得分: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

答案 3 :(得分: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

答案 4 :(得分:0)

将dottes放在行尾

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