1

Eventという名前のモデルクラスと、フィールド'when'があります。私はdescのときまでにイベントの順序を返そうとしているので、ここにコードがあります。

@events = Event.order("'when' DESC") 

私はデータベースとしてMySQLを使用しています。ただし、返された結果は並べ替えられません

コンソールを調べて、生成されたSQLをファイルしました。これは問題ないようです。

SELECT `events`.* FROM `events` ORDER BY 'when' DESC

また、このSQLをコンソールで実行すると、ソートされた結果が返されました。「いつ」で何か特別なことはありますか?

クエリをに変更するとEvent.order("events.when DESC")、並べ替えられた結果が返されます

4

2 に答える 2

3

一重引用符ではなく、バックティックにする必要があります。

@events = Event.order("`when` DESC") 

single quote周りで使用すると、whenそれはもはや列ではなく、単なる文字列値になります。tableNameとcolumnNameをエスケープするときは、singleではなくbacktickを使用する必要があります。

于 2012-11-26T14:17:20.727 に答える
1

フィールドに追加している一重引用符を削除できます。次のような全体を引用符で囲む必要があります。

@events = Event.order("column_name DESC") 

whenこれは、が予約語である場合を除いて、一般に column_names に当てはまります。したがって、バックティックする必要があります。

 @events = Event.order("`when` DESC")

それでも、列名を変更することをお勧めします。予約語を使用すると、最終的に複雑になります。whenまた、私の意見ではあまり説明的ではありません。イベントが作成/注文されたのはいつですか? イベントはいつ始まりますか?イベントはいつ終了しますか?おそらく、occurring_atまたはdate_occurring列名がより詳細になります。

于 2012-11-26T14:20:28.807 に答える