ActiveRecord #collection 方法不返回所有保存的集合
ActiveRecord #collection method is not returning all collection that is saved
我有用户和 Post 对象。用户有很多 post 并且 Post 属于一个用户。数据库适配器是sqlite3。我的挣扎是当我实例化第一个新 Post、保存它并将其用户分配给也保存到数据库的用户实例时,一切正常。但是,当我创建第二个 post 并将其用户分配给同一个用户时,用户集合返回的数组中只有第一个 post 实例。当我检查数据库时,post 的 user_id 是相同的。只返回第一个 post 对我来说没有意义,而数据库中有 2 个 post 具有相同的 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
当您 运行 “user.posts” 第一次 sql 查询从数据库加载该用户的所有 post 时。但是当你 运行 “user.posts” 第二次没有执行 sql 查询时(出于性能原因)所以你只得到一个 post。使用“user.posts.reload”重新加载posts(将执行新查询)
我有用户和 Post 对象。用户有很多 post 并且 Post 属于一个用户。数据库适配器是sqlite3。我的挣扎是当我实例化第一个新 Post、保存它并将其用户分配给也保存到数据库的用户实例时,一切正常。但是,当我创建第二个 post 并将其用户分配给同一个用户时,用户集合返回的数组中只有第一个 post 实例。当我检查数据库时,post 的 user_id 是相同的。只返回第一个 post 对我来说没有意义,而数据库中有 2 个 post 具有相同的 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
当您 运行 “user.posts” 第一次 sql 查询从数据库加载该用户的所有 post 时。但是当你 运行 “user.posts” 第二次没有执行 sql 查询时(出于性能原因)所以你只得到一个 post。使用“user.posts.reload”重新加载posts(将执行新查询)