rails4でアイテムに付けられたスコアの合計値が大きい順のデータを取得するには?
UserはItemを複数所持していて
ItemはScoreを複数所持していて
Scoreにはvalueというintegerの値を持っているという構成のとき
1ユーザが所持しているItemsの中身をスコアの合計値が大きい順に並べ替えしたいです。
class User < ActiveRecord::Base
has_many :items
def mostScoreItems(start=0, length=65535)
items
.includes(:scores)
.select('sum(value) as sum_value')
.group('items.id')
.order('sum_value desc')
.references(:scores)
end
end
前回の質問でなんとかここまででき、なんとか求めているデータを取得する事ができたのですが
いくつか実現したいことがあります。
① mostScoreItemsの第一引数startの値で、ソートを掛けた順のstartの値からデータを取得したい。
② mostScoreItemsの第二引数のlengthの値で、指定した件数だけデータを取得したい。
③ メソッドチェーンができなくなってるっぽいので、できるようにしたい。
恐らく、③を解決すれば、第一引数のstartは.offsetで繋ぎ、lengthは.limitで繋ぐことで、引数を渡す必要がなくなり、①と②も解決する上、コードの汎用性も高くなって幸せな気分になれると思ったのですが、Rails初心者のため、どうしてチェーンが切れてしまうのか、切れないようにするにはどのオブジェクトを返せばいいのか等、色々迷ってしまったため実現できませんでした。
そのため、引数をとるという方法で解決しようと思い.orderの後や.selectの後などに.limitや.offsetを付けてみたのですが駄目でした。
どうすれば解決できるか皆様の意見よろしくお願いいたします。