gpt4 book ai didi

ruby-on-rails - 根据find_or_create做出决策

转载 作者:行者123 更新时间:2023-12-03 08:16:05 27 4
gpt4 key购买 nike

我正在尝试做这样的事情(一次创建多个文件):

@files = params[:files].split(/\s*,\s*/) # comma-separated list is received
failures = []
@files.each do |file|
unless File.find_or_create_by_name(:name => file, ...)
failures << file
end
end
if failures.present?
errors.add(:base, "The following files are already in use: #{failures.to_sentence}
end

上面的不是很有效。当文件是“找到”而不是“创建”时,这应该提示错误(即,因为文件不是新文件)。但是,此处仍未将其添加到失败中(在这种情况下, find_or_create绝不会失败)。

我该如何优雅地做到上述几点?

注意:例如,如果用户错误地尝试两次创建相同的100个文件列表,则我想避免给用户显示令人讨厌的错误列表。我觉得简单地在句子中列出错误会比显示每个错误通知更好。

最佳答案

find_or_create_by_name将始终返回找到或创建的记录,除非由于验证或其他原因而失败。

如果添加validates_uniqueness_of:name对您不起作用,请考虑以下事项:

if File.find_by_name file
failures << file
else
unless File.create(:name => file, ...)
failures << file
end
end

但是,如果情况允许您添加唯一性验证,我会同意的。

关于ruby-on-rails - 根据find_or_create做出决策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5544970/

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