Ruby on rails 有很多:通过关联对只存在于内存中的模型有效吗?

Ruby on rails 有很多:通过关联对只存在于内存中的模型有效吗?,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,为了 然后我得到 a = A.new b = a.bs.build b.c = C.new 但是 如果保存了一个文件,那么它就可以正常工作。这是预期的吗?当模型只存在于内存中时,为什么直通关联不起作用?谢谢我猜对象a与对象c没有关联。通常它会运行一个查询,但不会,因为它没有保存到数据库。我认为它是为db关系创建的,它只是不检查内存中对象的引用 您也可以尝试以下方法: a.bs[0].c => c 但是 以下是我是如何解决这个问题的: a.cs => [created c obje

为了

然后我得到

a = A.new
b = a.bs.build
b.c = C.new
但是


如果保存了一个文件,那么它就可以正常工作。这是预期的吗?当模型只存在于内存中时,为什么直通关联不起作用?谢谢

我猜对象
a
与对象
c
没有关联。通常它会运行一个查询,但不会,因为它没有保存到数据库。我认为它是为db关系创建的,它只是不检查内存中对象的引用

您也可以尝试以下方法:

a.bs[0].c => c
但是


以下是我是如何解决这个问题的:

a.cs
=> [created c object]
class A
你可能会失去一些东西。例如,
cs
现在是只读的,因此您不能为其分配或
build
create
。在我的特殊情况下,这很好,因为我总是只变异
bs
,这可能是一种更好的做法。另外,像
B
这样的多对多对象通常会有一些您想要设置的属性


顺便说一句,如果
C
通过
连接到
B
而不是
所属
将上述代码更改为使用
flat\u map
而不是
map

也许,在保存(或加载)对象时“建立”了关联,而不是创建。是否必须对未保存的实例进行操作?不是,但我更喜欢在运行测试时占用尽可能小的空间,如果它们可以在内存中运行,我将节省大量时间。ActiveRecord将模型和持久性纠缠在一起的另一个可悲的副作用。Rails和AR让我大部分时间都很开心,但现在我很难过(
a.bs[0].c => c
a = A.new
a.cs.build
a.bs
=> []
a.cs
=> [created c object]
class A < ActiveRecord::Base
  has_many :bs

  def cs
    bs.map &:c
  end

end