gpt4 book ai didi

ruby-on-rails - find_or_initialize_by 和 has_many :through

转载 作者:行者123 更新时间:2023-12-03 17:34:08 26 4
gpt4 key购买 nike

我有一个用户从中导入数据的 xml 文件。这会在 Player 模型中创建一条记录。同时,我想在 Membership 协会中创建一条记录。

只有当记录尚不存在时,才应触发上述两种情况。这是该方法的简化版本:

@player = self.players.find_or_initialize_by_name_and_archetype(name, archetype)
if @player.save
self.memberships.create(:player_id => @player.id)
end

现在 find_or_initialize_by 工作了,但是仍然为每个玩家创建了一个 Membership,基本上忽略了 if 条件。

如何才能以简洁的方式做到这一点?

最佳答案

如果 @player 从查找或初始化中设置,调用它的保存仍然可以返回 true,即使它不是新记录——通过查找对象在控制台中尝试,不改变任何东西,调用保存,只要它是一个有效的对象,你仍然会得到 true。

话虽这么说,我认为你希望你的情况更符合

if @player.new_record? && @player.save

关于ruby-on-rails - find_or_initialize_by 和 has_many :through,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902592/

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