【发布时间】:2011-04-04 22:17:33
【问题描述】:
我正在尝试做这样的事情(一次创建多个文件):
@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 个文件的相同列表两次,我想避免向用户显示令人讨厌的大量错误列表。我觉得简单地在一个句子中列出错误会比为每个错误显示单独的错误通知更好。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 error-handling