したがって、いくつかのレコードを返すアクティブなレコード クエリがあります。たとえば、次のようになります。
jobs = Job.where(:user_id => current_user.id)
ご想像のとおり、これは current_user のジョブを返します。仕事に 2 つの日付があるdeadline_date
としdue_date
ます。注文したい場合は、次deadline_date
のようなことができます..
jobs.order("deadline_date asc")
これは期待どおりに機能します。ジョブ モデルにこのようなものがあることをイメージしてください。
class Job < ActiveRecord::Base
def deadline_date
self.read_attribute(:deadline_date) || self.due_date
end
end
deadline_date
そのため、 nil でない場合はジョブが表示され、それ以外の場合はフォールバックしてdue_date
. これをソートするために、次のことを行いました...
jobs.sort_by{|job| job.deadline_date}
jobs.sort_by{|job| job.deadline_date}.reverse
これは私の問題を解決しますが、より良い代替手段があるのではないかと思いました.SQLを使用してこれを達成することは可能ですか? sort_order
また、これは、このように直接渡すことができる変数をコントローラーに持っているという点で、いくつかの繰り返しコードを生成します...
jobs.order(sort_order)
今はもっとこのように見えます...
if params[:sort] == "deadline_date"
if params[:order] == "asc"
jobs.sort_by{|job| job.deadline_date}
else
jobs.sort_by{|job| job.deadline_date}.reverse
end
else
jobs.order(sort_order)
end
注:これは実際には任意の例であり、少し面倒ですが、アイデアは得られます. そこで、SQL の代替案や改善方法についての提案を探しています。乾杯