47

today私は多くのモデル関係を持っていますtasks

ユーザーのtodayオブジェクトを取得し、tasksそれらをすべてJsonに含めてレンダリングしようとしています。は HTML ページのレンダリングにも使用されるため、オブジェクトtasks内でを注文することにするまで、これはすべて順調に進んでいました。を含めて注文する方法はありますか?todayrespond_with blocktasks

私はこのようなことを試みています:

class TodaysController < ApplicationController
  respond_to :html, :json
  def show
    @today = Today.where(:user_id => current_user.id).joins(:tasks).includes(:tasks).order(:priority).first
    respond_with @today, :include => :tasks
  end
end

これはすべてを正しく取得しますが、タスクをまったく順序付けしていないようです。

これは私が以前持っていたものです(うまく機能しましたが、順序がありませんでした):

class TodaysController < ApplicationController
  respond_to :html, :json
  def show
    @today = current_user.today
    respond_with @today, :include => :tasks
  end
end

データを取得して、後で次のように並べ替えることができることはわかっています。

@today = current_user.today
@today.tasks.sort!{|a,b| a.priority <=> b.priority }

これは機能し、テストに合格しますが、これを解決する ActiveRecord の方法を望んでいました。

4

2 に答える 2

69

モデルでこれを試してくださいToday

has_many :tasks, :order => 'priority DESC'

編集: 以下のコメントで述べたように、Rails 4+ では、これは次のようになりました。

has_many :tasks, -> { order(:priority => :desc) }

詳細はこちら

于 2011-03-18T08:35:08.247 に答える