gpt4 book ai didi

ruby-on-rails - 接受_nested_attributes_for 和find_or_create?

转载 作者:行者123 更新时间:2023-12-03 05:51:47 29 4
gpt4 key购买 nike

我使用Rails的accepts_nested_attributes_for方法取得了巨大成功,但是如果记录已经存在,我如何才能让它创建新记录?

举个例子:

假设我有三个模型,Team、Membership 和 Player,每个团队通过membership 有很多玩家,并且玩家可以属于多个团队。然后,Team 模型可能会接受玩家的嵌套属性,但这意味着通过组合 team+player(s) 表单提交的每个玩家都将被创建为新的玩家记录。

如果我只想在没有同名玩家的情况下以这种方式创建新的玩家记录,我应该如何做?如果存在同名球员,则不应创建新的球员记录,而是应找到正确的球员并将其与新的球队记录关联。

最佳答案

当您定义自动保存关联的 Hook 时,将跳过正常的代码路径并调用您的方法。因此,您可以这样做:

class Post < ActiveRecord::Base
belongs_to :author, :autosave => true
accepts_nested_attributes_for :author

# If you need to validate the associated record, you can add a method like this:
# validate_associated_record_for_author
def autosave_associated_records_for_author
# Find or create the author by name
if new_author = Author.find_by_name(author.name)
self.author = new_author
else
self.author.save!
end
end
end

此代码未经测试,但它应该是您所需要的。

关于ruby-on-rails - 接受_nested_attributes_for 和find_or_create?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579924/

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