:在has_many关系上忽略了自动保存 – 我错过了什么?

我有一对class级:

class Collection < ActiveRecord::Base has_many :items, autosave: true end class Item < ActiveRecord::Base belongs_to :collection end 

来自文档 :

当:autosave为true时,无论是否为新记录,都会保存所有子项:

但是当我更新一个Item并保存其父CollectionItem的upated属性不会被保存:

  > c = Collection.first => # > i = c.items.first => # > i.name = 'new name' => "new name" > c.save => true > Collection.first.items => [#] 

那么,我错过了什么?

我正在使用Rails 3.2.5和Ruby 1.9.2。


所以我在ActiveRecord的源代码中做了一些挖掘。 我们可以掌握c的自动保存关联:

  > c.class.reflect_on_all_autosave_associations => [#true, :extend=>[]}, @active_record=Collection(id: integer, name: string, created_at: datetime, updated_at: datetime), @plural_name="items", @collection=true, @class_name="Item", @klass=Item(id: integer, collection_id: integer, name: string, created_at: datetime, updated_at: datetime), @foreign_key="collection_id", @active_record_primary_key="id", @type=nil>] 

我认为这表明该协会已经设立了自动保存。

然后我们可以获得与c对应的关联实例:

  > a = c.send :association_instance_get, :items => #<ActiveRecord::Associations::HasManyAssociation:0x007fece738e920 @target=[#], @reflection=#true, :extend=>[]}, @active_record=Collection(id: integer, name: string, created_at: datetime, updated_at: datetime), @plural_name="items", @collection=true, @class_name="Item", @klass=Item(id: integer, collection_id: integer, name: string, created_at: datetime, updated_at: datetime), @foreign_key="collection_id", @active_record_primary_key="id", @type=nil>, @owner=#, @updated=false, @loaded=true, @association_scope=[#], @proxy=[#], @stale_state=nil> 

然后,我们可以找到通过此关联关联的实际对象:

  > a.target => [#] 

这里找到的对象没有我之前做过的更新。

这里的问题是这条线

  i = c.items.first 

此行从数据库中提取正确的项目,但将其附加到集合c。 它是一个与物体不同的ruby物体

 i = c.items[0] 

如果您用第二行替换第一行,您的示例将起作用。