1

高度な順序付けに関するほとんどの質問には、いくつかの優先順位付けされたフィールドが含まれますが、ここでは別の問題があります。

私は一連のプロジェクトをタイトル順に並べており、これらのプロジェクトは社内の個人に割り当てられています。私は、各個人のプロジェクトをその個人のトップに浮かび上がらせることができるようにしたいと考えています。

assigned_individualこれは、それまでに注文するという要求ではありませんjob_title(これは、私のものではないすべてのプロジェクトの注文を台無しにするためです)。これは、レコードを主に並べ替える要求ですが、job_titleたとえば、あるレコードが最初に表示されるように上書きしますassigned_individual_id = 3

4

2 に答える 2

1

難しいことではありません。次のように、CASE を ORDER BY に挿入して、対象の行を手動で一番上にプッシュするだけです。

id = M.send(:sanitize_sql, ['?', id])
M.order("case when assigned_individual = #{id} then 0 else 1 end, job_title")

もちろん、idは一番上に置きたいユーザーです。これが M のメソッドのいずれかの内部で行われる場合send、 の保護を回避するために を使用する必要はありませんsanitize_sql

この手法は、必要に応じて複数のユーザーをトップにプッシュするように簡単に拡張できます。

于 2012-08-26T22:18:24.383 に答える
0

2 つのパスでビルドします。

@projects = current_user.projects
@projects += Project.all
@projects.uniq!

注意: デフォルトのスコープを使用してプロジェクトを名前順に並べたと仮定します。

于 2012-08-26T22:11:14.503 に答える