У меня следующая ситуация с ActiveRecord (в Rails 2.3.8):
class Order < ActiveRecord::Base
has_many :documents
accepts_nested_attributes_for :documents
end
class Document <ActiveRecord::Base
belongs_to :order
end
Теперь в контроллере я хочу по-разному направлять пользователя в зависимости от того, внесли ли они изменения в существующие записи, например,
@order.attributes = params[:order]
if @order.changed?
# save order
# redirect one place
else
# redirect another place
end
Для чего я хочу использовать измененное? флаг. Получается, что @ order.changed? не запрашивает детей.
Я пытался реализовать это с помощью метода прокси-сервера ассоциации в has_many: Documents Association, например:
has_many :documents do
def changed?
any? {|doc| doc.changed?}
end
end
Но у этого есть непреднамеренный побочный эффект, что он загружает связанные документы с диска, который, по-видимому, стирает любые изменения, которые были сделаны в назначении вложенных атрибутов в @ order.attributes = params [: order] Это либо кажется преднамеренным дизайнерское решение в Rails, но тогда как его решить? Или это пробел в особенностях?
Мысли
Wolf