0

我可以ActiveRecord::Errors与现有对象一起使用吗?

我有一个Bla以简单方式创建的对象;它只接收一个名称和一个csv 文件

创建此对象后,通过调用异步操作sidekiq并处理csv 文件以创建对象的其他属性Bla

我不确定如何处理文件处理过程中可能引发的异常。我正在考虑将错误添加到errors可访问验证错误并由ActiveRecord::Errors. 这样,错误就可以显示在它的显示视图中。

我已经看到这个对象与对象创建一起使用,它用于在将对象提交到数据库之前在表单上显示错误。

我可以用它来显示创建后发生的错误吗?这些错误是否存储在数据库中?

4

1 回答 1

1

Rails 验证错误存储在数据库中。它们旨在阻止数据库写入;也就是说,它们会阻止您将无效对象写入数据库。

验证错误仅存储在 ActiveRecord 对象的 'errors' 属性中,并且仅在变量“活动”时才保留,在 Rails 中通常仅在呈现控制器执行后的页面所需的时间行动。

我不太了解sidekiq。如果它在与 Rails 服务器不同的进程中运行,则验证错误仅在内存中,不会在两者之间共享。即使它不是一个单独的过程,我很确定当异步操作终止时,您的验证变量将不复存在。

所以我怀疑你提出的方法不可行。您可能必须将这些验证错误存储在更持久的内存中,以便 Rails 可以读取发现的错误,sidekiq反之亦然。

于 2013-04-03T19:03:36.673 回答