1

ルビーの空白に対する異なる感度/設定はありますか?

私は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

この構文はRuby1.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-18T06:48:55.287 に答える
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 に答える