ActiveRecord #collection 方法不返回所有保存的集合[关闭]

Posted

技术标签:

【中文标题】ActiveRecord #collection 方法不返回所有保存的集合[关闭]【英文标题】:ActiveRecord #collection method is not returning all collection that is saved [closed] 【发布时间】:2021-05-21 20:34:25 【问题描述】:

我有 User 和 Post 对象。用户有很多帖子,帖子属于一个用户。数据库适配器是 sqlite3。我的挣扎是当我实例化第一个新帖子,保存它并将其用户分配给一个用户实例时,该实例也保存到数据库中,一切正常。但是,当我创建第二个帖子并将其用户分配给同一个用户时,用户集合返回的数组中只有第一个帖子实例。当我检查数据库时,两个帖子的 user_id 都相同。只返回第一个帖子对我来说没有意义,而数据库中有 2 个帖子具有相同的 user_id。这是代码。 (我知道 user1.posts.create(text: "new post") 会做我想做的,但我想知道#collection有什么问题)

#user.rb
class User < ActiveRecord::Base
    has_many :posts
end

#post.rb
class Post < ActiveRecord::Base
    belongs_to :user
end

#schema.rb
  create_table "posts", force: :cascade do |t|
    t.string "text"
    t.integer "user_id"
  end

  create_table "users", force: :cascade do |t|
    t.string "name"
  end

【问题讨论】:

请不要链接到带有代码或控制台输出的图像。相反,将相关部分复制并粘贴到您的问题中。图片难以阅读,无法索引和搜索,想要帮助您的人必须转录您的代码。 【参考方案1】:

当您第一次运行“user.posts”时,sql 查询会从数据库中加载该用户的所有帖子。但是,当您第二次运行“user.posts”时,没有执行任何 sql 查询(出于性能原因),因此您只能获得一篇帖子。使用“user.posts.reload”重新加载帖子(将执行新查询)

【讨论】:

以上是关于ActiveRecord #collection 方法不返回所有保存的集合[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 购物车错误“ActiveRecord_Associations_CollectionProxy”

Rails ActiveRecord_Associations_CollectionProxy 与单表继承

collection_select 和 has_and_belongs_to_many 关系

ActiveRecord::使用默认值存储

仅列出 ActiveRecord 子类方法

找不到 id=#<ActiveRecord::Relation::ActiveRecord_Relation_User:0x2eb9b58> 的用户