处理Rails控制器异常/错误

时间:2018-08-18 03:15:49

标签: ruby-on-rails exception-handling nomethoderror

我有一个控制器动作,该动作批准blob,并在NoMethodError上抛出do_this()

def approve
 if amount >= 0
  @blob.accept
  respond_to do |format|
   format.html { redirect_to blobs_path, notice: "accepted #{do_this(@blob)}" }
   format.json { render :index, status: :created, location: @blob }
  end
 else
  @blob.reject
  redirect_to blobs_path, notice: "deleted."
 end
end

我的解决方案是将#{do_this(@blob)}更改为#{helpers.do_this(@blob)}。但是有一个问题:@blob已被批准,错误出在ActiveRecord::Base.transaction方法中的accept之外。更改代码并刷新页面会使该事务进行两次。 :/

我知道将事务放入控制器内部不是很好,但是如果我预计将来会出现类似情况怎么办?我将如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

通过向unapproved添加@blob范围来解决此问题。如果@blob.accept将某项标记为已批准,则它应仅对未接受的记录起作用。哇,大哥。