DBから取得したデータを最後の要素以外ランダムにしたい

DBから取得したデータの最後の要素以外ランダムにすることが以前あり、少し悩んだので忘れないようにメモ

前提

  • 使っている言語はRuby on Rails
  • 問題に紐づく解答がseedで挿入されており最後の解答が「わからない」
  • やりたいことは「わからない」以外の解答をランダムにしてフロント側に返したい

どうやったか?

方法はこんな感じ

  1. 問題に紐づく解答データの取得
  2. 1で取得した最後の要素を取得
  3. 1のデータの最後の1個前までをランダムにして返却用の変数に入れる
  4. 3の返却用の変数に2で取得した最後のデータをpushする

ソースは以下

question = Question.find(params[:id])
all_answer = question.answers
last_answer = all_answer.last
random_answer = all_answer[0..(all_answer.length - 2)].sort_by{rand}
random_answer.push(last_answer)

作ってみて

あらかじめ最後の要素だけ別の変数に入れておいて最後に追加するようにしました。

最後の要素以外をランダムにしたかったのでsort_byする際に最後の要素以外を指定したのですが、length-2はあまりスマートではない気がしています。。

良い方法ありましたら、コメント等で教えてもらえるとありがたいです。