Keeping custom sorting across edit/update controller methods

# I have an order
class Order < ActiveRecord::Base
  has_many :order_items
end
# with items
class OrderItem < ActiveRecord::Base
  belongs_to :family
  belongs_to :order
  has_many :order_items

# I sort the order items via a scope which joins with item family to
sort them accordingly
  scope :default_order, joins(:family).order('families.name,
order_items.quantity')
end

# Controller
def edit
   @order = Order.find params[:id]
   @ois = @order.order_items.default_order
end

# My problem is in the update method, if we have errors and must show
the order to the user...
# How do I sort properly my items?
def update
    ...
    if @order.update_attributes(params[:order])
       ...
    else #it doesn't validate
       #if I do
       @ois = @order.order_items.default_order
      # items are reloaded (with the correct order) BUT user input and
validation errors are lost.
    end
end

How do I keep the sorting + data?!?
- I don't want to use a default_scope in order items because of
problems I had with it in the past and performance.
- Since my sorting is made over two models, I can't use the
basic :order on the has_many association.
I guess the best would be to be able to assign a default_scope on the
has_many association so when they are loaded implicitly (especially
during @order.update_attributes(params[:order]) the order is
consistent.

To show the pain and ugliness, I currently do this way.
@items = @order.order_items
@items = params[:order][:order_items_attributes].values.map{|v|
v[:id]}.map{|id| @items.detect{|i| i.id == id.to_i}} unless
@items.empty?
It works because the params hash keeps the sorting order....

I really hope I'm doing something wrong and there is a better way...