Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails :autosave ignored on有许多关系--我缺少什么?_Ruby On Rails - Fatal编程技术网

Ruby on rails :autosave ignored on有许多关系--我缺少什么?

Ruby on rails :autosave ignored on有许多关系--我缺少什么?,ruby-on-rails,Ruby On Rails,我有两门课: class Collection < ActiveRecord::Base

我有两门课:

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

class Item < ActiveRecord::Base
  belongs_to :collection
end
那么,我错过了什么

我使用的是Rails 3.2.5和Ruby 1.9.2


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

 > c.class.reflect_on_all_autosave_associations
 => [#<ActiveRecord::Reflection::AssociationReflection:0x007fece57b3bd8 @macro=:has_many, @name=:items, @options={:autosave=>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>]
然后,我们可以找到通过该关联关联的实际对象:

 > a.target
 => [#<Item id: 1, collection_id: 1, name: "item1", created_at: "2012-07-23 00:00:25", updated_at: "2012-07-23 00:00:25">]
>a.target
=> [#]

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

这里的问题是行

 i = c.items.first
此行从数据库中提取正确的项,但不将其附加到集合c。它是一个与对象不同的ruby对象

i = c.items[0]

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

谢谢。在这里我想,首先,通常情况下是这样的。这种差异是由Rails将#first转换为SQL谓词而产生的。你可以在这里看到Ruby#first的C源代码:在这里可以看到Ralis的关系:
 i = c.items.first
i = c.items[0]