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を付けてみたのですが駄目でした。

どうすれば解決できるか皆様の意見よろしくお願いいたします。