在创建对象后使用ActiveRecord :: Errors

时间:2013-04-03 18:44:52

标签: ruby-on-rails ruby-on-rails-3 activerecord

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

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

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

我不确定如何处理文件处理期间可能引发的异常。我正在考虑将错误添加到errors对象中,该对象可用于验证错误并由ActiveRecord::Errors提供。这样,错误就可以显示在它的节目视图中。

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

我可以用它来显示创建后出现的错误吗?这些错误是否存储在db?

1 个答案:

答案 0 :(得分:1)

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

验证错误仅存储在ActiveRecord对象的'errors'属性中,并且只有在变量为“alive”时才会保留,这在Rails中通常只有在呈现执行后的页面时才会保留控制器动作。

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

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