这个问题被问了很多遍,但是我发现我以为是解决方案的一个答案没有帮助。它指向了这个article,但也许我没有正确应用它。
这是代码情况: 好的,我正在控制器中执行以下操作:
def create
# some code
create_record and return
end
private
def create_record
begin
curr_user.events.build(#lots of fields).save!
rescue
render head :internal_server_error and return true
end
render head:ok and return true
end
但是我的日志中出现以下错误:AbstractController :: DoubleRenderError。错误消息后指出的令人反感的行是对create_record的调用,救援块的开始以及救援块中的呈现。
答案 0 :(得分:0)
问题是,当您从方法return
create_record
时,它仅从该方法返回,而不是调用此方法的实际操作。
因此,您在render head :internal_server_error
方法内render head: :ok
或create_record
并从那里返回。控制权回到动作create
,按照惯例,它尝试呈现模板 create 。因此,AbstractController::DoubleRenderError
。
要解决此问题,建议您将代码更改为以下内容:
def create
begin
create_record
rescue
head :internal_server_error and return true
end
head :ok
end
private
def create_record
curr_user.events.build(#lots of fields).save!
end
警告:检查head :ok
的语法。我不确定。.