2

Rails で、カテゴリのコレクションを作成してみましょう。

@categories = Category.order('name asc')

これらのカテゴリの 1 つに「新規」という名前があります。コレクションの最初に「New」カテゴリを置き、残りをアルファベット順にしたいと思います。

データベース クエリを 1 つだけ実行したいのですが。これはできるだけ簡潔にしたいと思います。

1 つのクエリ制限が設定されていない場合、"New" カテゴリをフェッチし、残りのカテゴリを名前順にフェッチし、新しいカテゴリを @categories コレクションに "シフト解除" できることはわかっていますが、より良い方法でなければなりません!

@new = Category.where(name: 'name').first
@categories = Category.where("name != ?", 'Name').order('name asc')
@categories.unshift(@new)

何か案は?

4

1 に答える 1

2

私はかなり良いものを思いついたと思います:

@categories = Category.order('name asc').partition { |cat| cat.name == 'New' }

または、さらに良い:

@categories = Category.order('name asc').partition { |cat| cat.name == 'New' }.flatten

これにより、1 つのクエリと、コレクションの最初の "New" カテゴリが得られます。

于 2012-11-06T02:58:00.340 に答える