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
为此我想用换过的?旗帜。事实证明@订单。更改了吗?不查询子级。
我试着通过has\u many:documents关联上的关联代理方法来实现,如下所示:
has_many :documents do
def changed?
any? {|doc| doc.changed?}
end
end
但这有一个意外的副作用,即它从磁盘加载相关文档,这显然会消除在中的嵌套属性赋值中所做的任何更改@订单.属性=params[:order]这在Rails中似乎是一个有意的设计决策,但是如何解决它呢?还是功能上的差距?
思想?
狼