我有一个控制器动作,该动作批准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
之外。更改代码并刷新页面会使该事务进行两次。 :/
我知道将事务放入控制器内部不是很好,但是如果我预计将来会出现类似情况怎么办?我将如何避免这种情况?
答案 0 :(得分:0)
通过向unapproved
添加@blob
范围来解决此问题。如果@blob.accept
将某项标记为已批准,则它应仅对未接受的记录起作用。哇,大哥。