2016-06-27 22 views
0

私は一連のユーザーを持っています。彼らには多くの要望があります。関連付けられたモデル内の属性の高度な順序付け

# user.rb 
has_many :requests 

今私は最後要求created_atタイムスタンプによってそれらをソートしたいと思います。

その場合、ユーザは最新のリクエスト彼らはなど#1だ(created_atは、現在の時刻に最も近いもの)を持っていることを

任意のアイデアは?

しかし私は、私が欲しいものは明らかではありません、タイムスタンプのcreated_at最初の要求によってそれらをソートしている

User.includes(:requests).order('requests.created_at') 

を試してみました。最後のリクエストのみを取得したい。その後、作成した日付でユーザーに最後のリクエストをソートし、その順にユーザーに注文します。

更新: また、ユーザーにリクエストがない場合は、最下部にある必要があります。今は、彼らは何も持っていない場合、彼らは一番上に置かれます。

答えて

0
User.joins(:requests).includes(:requests).order('requests.created_at desc') 

を試してみてください。

includesは、requestsをあらかじめ読み込んでおきますので、requestsの並べ替えには役立ちません。このような場合に組み込むことがSQL how to make null values

から

UPDATE

借入この

User.joins(:requests).includes(:requests).order('CASE WHEN requests.created_at IS NULL THEN 1 ELSE 0 END asc, requests.created_at desc') 

まず順序がnullのものを置くように、それはおそらく何かを探します一番下に、日付順にd esc

+0

どのように私はそれを並べ替えることができるように任意の要求がないユーザーも最後に来るようにどのようなアイデア?現在、彼らは最初です。 –

+0

@SebastianJenningsAlmnesが更新されました – lusketeer

1

降順でソートする必要があります。あなたはそれが結合テーブルの上に並べ替えられますので、それをjoinsする必要が

User.includes(:requests).order('requests.created_at desc').first() 
関連する問題