2011-02-08 6 views
0
問題なし

I持ってapplication_helper.rbファイルの次の2つのActiveRecordクエリ:問題 - SQLiteの

@left_menu = Page.select( 'ID、menu_name' ).where(:公表=>真、:left_menu =>真).ORDER( "ソート")

のように書くこともできます。

@left_menu = Page.select( 'ID、menu_name') .order(:published => true、:left_menu => true).order( "sort 'ASC")

および

@left_menu = Page.find(:すべて:条件=> {:公開=>真:left_menu =>真}:注文=>:ソート)

なぜ最初のものは、に失敗しません2番目の列はソート列にソートされていませんか?どちらもSQLiteで動作しますが、2番目のものだけがMySQLで動作します。

アイデア?

+0

MySQLはデフォルトの並べ替え方向を持つことはできません。 – qpingu

答えて

1

これはther order paramsの引用です。生成された
問合せは、その文字"引用

"SELECT id, title FROM `pages` WHERE (`pages`.`pub` = 1) ORDER BY 'sort' ASC" 

(に類似)となります。間違ったSQL構文ですが、列値ではなくコスト値で並べ替えます。 sqliteはそれを許可し、mysqlは許さない。
はオーダーチェーンメソッドのパラメータでは、単一引用符なしで簡単な使用

Page.select('id, menu_name').where(:published => true, :left_menu => true).order("sort ASC") 

にしてみてください。

私の英語のために申し訳ありません。 良い一日を持っています