gpt4 book ai didi

ruby-on-rails - 如果我通过另一个父对象创建子对象,则 Has_many 集合方法返回空数组

转载 作者:行者123 更新时间:2023-12-04 05:54:31 26 4
gpt4 key购买 nike

对不起,标题令人困惑,我无法更好地解释它。随意编辑它。

我有这个结构:

class Home < ActiveRecord::Base
has_many :reservations

end

class User < ActiveRecord::Base
has_many :reservations

end

class Reservation < ActiveRecord::Base
belongs_to :user
belongs_to :home
end

这意味着 Reservations 与进行预订的用户相关联,并且
他正在预订的家。

我正在创建这样的预订实例:
user_instance.reservations.create(:home => home_instance, :dates_and_other_data => ...)

使用这种方法,可以在数据库中正确创建预订,我可以检索它(以及用户所做的其余预订)
user_instance.reservations

但是,如果我尝试从用作参数的 home 实例中检索它,如下所示:
home_instance.reservations 

这将返回一个空数组。也会发生相反的情况(如果我从家庭创建它,我无法从用户实例中检索预订)。

我究竟做错了什么?

这两句话不一样吗?:
Reservation.create(:user => user, :home => home, :other_stuff)
User.reservations.create(:home => home, :other_stuff)

最佳答案

用户模型无法知道您刚刚从家庭模型创建了预订,反之亦然。当您第一次访问关联时,ActiveRecord 会记住该调用的结果,因此您以后每次使用该关联时都不需要调用数据库。

home_instance.reservations   # This will pull from the databse, and store the
# results in a variable.

# This will create a new reservation record in the database.
user_instance.reservations.create(:home => home_instance, :dates_and_other_data => ...)

home_instance.reservations # We don't go to the database here, since we already
# have the stored variable. So we don't see the new
# reservation.

你可以通过传递 true 来解决这个问题。作为 has_many 关联的参数,如下所示:
home_instance.reservations(true)  # The true forces ActiveRecord to requery the DB>

关于ruby-on-rails - 如果我通过另一个父对象创建子对象,则 Has_many 集合方法返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9683029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com