Rails has_many关联返回空数组

时间:2018-07-31 08:55:03

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord

我们有一个在Rails 4.0.12上运行的旧版应用程序,我想知道这是否已经解决了一些奇怪的ActiveRecord错误。

这是我的模特:

class Gathering < ActiveRecord::Base
  has_many :gathering_contents, dependent: :destroy
end

我看到的问题是该关联会返回一个空数组,直到重新加载为止。控制台输出示例:

g = Gathering.last    
g.gathering_contents
GatheringContent Load (0.6ms)  SELECT "gathering_contents".* FROM "gathering_contents" WHERE "gathering_contents"."gathering_id" = 'f6b6a7a7-7f51-4c56-af95-42567f7bc15b'  [["gathering_id", "f6b6a7a7-7f51-4c56-af95-42567f7bc15b"]]
=> #<ActiveRecord::Associations::CollectionProxy []>

运行原始SQL查询将返回两个结果。重新加载关联也会返回两个结果:

g.gathering_contents.reload
GatheringContent Load (4.7ms)  SELECT "gathering_contents".* FROM "gathering_contents" WHERE "gathering_contents"."gathering_id" = 'f6b6a7a7-7f51-4c56-af95-42567f7bc15b'  [["gathering_id", "f6b6a7a7-7f51-4c56-af95-42567f7bc15b"]]
=> #<ActiveRecord::Associations::CollectionProxy [#<GatheringContent id: "5e82a73c-036b-4ff1-9af3-2b19c2f1746b", gathering_id: "f6b6a7a7-7f51-4c56-af95-42567f7bc15b", course_id: "ad3eb286-3617-46bd-a10d-6d09cca23b64", path_id: nil, created_at: "2016-03-30 12:52:35", updated_at: "2016-03-30 12:52:35", public_course_id: nil, company_course_id: "ad3eb286-3617-46bd-a10d-6d09cca23b64", user_id: "33626432-0fa0-439f-9920-9f62ff26ffc6", admin_id: nil, conversation_id: nil>, #<GatheringContent id: "3ef08d57-d294-48a2-a46d-eab4b1a43132", gathering_id: "f6b6a7a7-7f51-4c56-af95-42567f7bc15b", course_id: nil, path_id: nil, created_at: "2016-04-01 15:19:27", updated_at: "2016-04-01 15:19:27", public_course_id: nil, company_course_id: nil, user_id: "458fa79f-4d1f-450b-bf4a-091b1183f86c", admin_id: nil, conversation_id: "8dbe18e7-a78d-45ca-9e3b-8fa403675f0b">]>

对于为什么查询在重新加载之前会返回空结果,我没有很好的理论。谢谢您的投入!

0 个答案:

没有答案