3

写真のあるアイテムとないアイテムのギャラリー インデックスを作成しています。

すべてのアイテム (または will_paginate のサブセット) を取得し、最初に写真付きのアイテム (ペーパークリップ経由で添付) で並べ替え、次にレコードの作成日で並べ替えたいと思います。

最初の部分には、バイナリの「添付ファイルあり」タイプのステータスが必要です。追加のモデル属性を作成し、ペーパークリップのコールバックを使用してバイナリ列のステータスを設定する必要がありますか? それとももっと良い方法がありますか?

will_paginate を使用してレコードのブロックを循環させるため、この並べ替えは DB レベルで行うことをお勧めします。

前もって感謝します

4

2 に答える 2

3

追加のフィールドを作成する必要はありません。代わりに、CONV を使用してその場でファイル名をブール値に変換します (MySQL でこれを実行していると仮定していますが、同等の関数は他の RDBMS で利用できます)。

ORDER BY CONV(photo_file_name,2,2) DESC, created_at

技術的には、CONV は異なる基数間で数値を変換する関数ですが、文字列入力を受け入れます。photo_file_name 列に値が存在する場合は 0 を返し、NULL 入力の場合は NULL を返します。

MySQL CONV リファレンス

于 2010-01-19T07:10:06.117 に答える
2

dev では SQLite を、本番環境では postgres を訴えているため (そしてすぐに本番環境に切り替える可能性があるため)、CONV() は利用できませんでした。

必要なバイナリ値を作成するために、ORDER BY 句で比較を行いました。

ORDER BY (photo_file_name IS NULL) ASC, created_at DESC 

これは、すべての DB でサポートされているようで、意図した目標を達成しています。

于 2010-01-19T23:41:42.790 に答える