gpt4 book ai didi

ruby-on-rails-3 - 无法摆脱 AbstractController::DoubleRenderError

转载 作者:行者123 更新时间:2023-12-02 22:43:14 28 4
gpt4 key购买 nike

我遇到了一个双重渲染错误,我无法在模型的更新方法中摆脱它。

这是 Controller 的代码

class Admin::CmsHappeningNowFeatureController < ApplicationController

def index
# Various model data retrieval...

render 'admin/cms/hn_features/index', layout: 'admin_cms'
end

# Works fine
def edit
@feature = CmsHappeningNowFeature.find_by_id(params[:id])
render 'admin/cms/hn_features/feature', layout: 'admin_cms'
end

# Throws a AbstractController::DoubleRenderError upon submission
def update
@feature = CmsHappeningNowFeature.find_by_id(params[:id])
@feature.attributes = params[:cms_happening_now_feature]
if @feature.save
redirect_to(:action => index, :notice => "Successfully updated feature.") and return
end
render 'admin/cms/hn_features/feature', layout: 'admin_cms'
end

# ... rest of the class
end

当重定向到另一个 Controller 时,问题消失了。似乎重定向到同一个 Controller 会使 rails 执行该方法而不实际发送重定向。通过查看日志,提交更新表单时,调用了update,然后调用了index,执行了render from index,然后发出重定向但失败。

我错过了什么?解决方法是什么?

最佳答案

好吧,真正的原因是在

redirect_to(:action => index, :notice => "Successfully updated feature.") and return
# ^^^^^ This calls the index method

您调用 index 方法,该方法将首先呈现。 redirect_to 调用将取回该函数的结果(无论 index 中的 render 调用返回什么)。并进行第二次渲染

你真正想写的是:

redirect_to(:action => :index, :notice => "Successfully updated feature.") and return

:action 设置为符号的位置,即代表 Action 但不直接调用它的索引。

关于ruby-on-rails-3 - 无法摆脱 AbstractController::DoubleRenderError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10456340/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com