提问人:Rahul kumar 提问时间:11/11/2023 最后编辑:engineersmnkyRahul kumar 更新时间:11/18/2023 访问量:78
在此操作中多次调用渲染和/或重定向。您只能调用 render 或重定向,并且每个操作问题最多调用一次
Render and/or redirect were called multiple times in this action. You may only call render OR redirect, and at most once per action issue
问:
当我使用分页按钮或使用看板卡中的 scrobble 栏更改页面时,当我尝试在控制器的同一操作中渲染和重定向时,会在 Ruby on Rails 中获取 DoubleRenderError。正如错误所暗示的那样,每个操作只能调用一次 render 或 redirect_to
def index
session[:current_page] = "all_request"
default_per_page = 15
@per_page = params[:per_page] || session[:per_page] || default_per_page
session[:per_page] = @per_page
@q = ClientRequest.includes(:resource_infos, :developers).page(params[:page]).per(@per_page).ransack(params[:q])
if (params[:q] && @filter_per_page_value = params[:q][:per_page_eq]) != nil
@per_page = @filter_per_page_value
@q = ClientRequest.includes(:resource_infos, :developers).page(params[:page]).per(@per_page).ransack(params[:q])
end
@client_requests = @q.result
kanban_view_details
render_partials
end
def kanban_view_details
kanban_column_data = KanbanColumn.in_order_of(:name, KanbanViewHelper::KANBAN_COLUMN_ORDER.keys)
@grouped_kanban_columns = {}
kanban_column_data.each do |kanban_column|
custom_sorting_expression, sorted_records = generate_sorted_records(kanban_column)
pagy, client_requests = pagy_countless(sorted_records, items: 6, page_param: kanban_column.name)
@grouped_kanban_columns[kanban_column] = [pagy, client_requests]
end
load_cache
@pagy, @kanban_columns = pagy_countless(kanban_column_data, items: 9)
if params[:page]
render "scrollable_list"
elsif params[:load]
render partial: "kanban_views/common_view/common_kanban_page"
end
end
def render_partials
kanban_view_details
partial_name = params[:name]
if partial_name == "classic_view"
render partial: "classic_views/classic_view"
elsif partial_name == "kanban_view"
load_cache
render partial: "kanban_views/common_view/common_kanban_page", locals: { client_request_cache: @client_request_cache }
end
end
答:
0赞
Christian Martin
11/11/2023
#1
我认为您正在 kambas 中调用渲染,并在索引中调用最终渲染。只需更改代码以使其呈现 kambas has a return after 以防止索引返回
评论
0赞
Nsikan Sylvester
11/18/2023
你能举个例子来验证你的答案吗?
1赞
Adesoji Alu
11/14/2023
#2
Ruby V7 文档中明确指出了这一点: https://api.rubyonrails.org/classes/AbstractController/DoubleRenderError.html DEFAULT_MESSAGE = “在此操作中多次调用渲染和/或重定向。请注意,您只能调用 render 或 redirect,并且每个操作最多调用一次。另请注意,重定向和渲染都不会终止操作的执行,因此,如果要在重定向后退出操作,则需要执行类似“redirect_to(...);返回”。
在索引操作中,按顺序调用方法 kanban_view_details 和 render_partials。这两种方法都包含呈现调用,如果同时满足这两种方法中的呈现条件,则可能导致 DoubleRenderError。要解决此问题,您需要确保每个操作只发生一次渲染或重定向,如前面的默认消息所示。像这样重构你的代码
红宝石
def index
session[:current_page] = "all_request"
default_per_page = 15
@per_page = params[:per_page] || session[:per_page] || default_per_page
session[:per_page] = @per_page
@q = ClientRequest.includes(:resource_infos, :developers).page(params[:page]).per(@per_page).ransack(params[:q])
if (params[:q] && @filter_per_page_value = params[:q][:per_page_eq]) != nil
@per_page = @filter_per_page_value
@q = ClientRequest.includes(:resource_infos, :developers).page(params[:page]).per(@per_page).ransack(params[:q])
end
@client_requests = @q.result
kanban_view_details
render_partials
end
def kanban_view_details
kanban_column_data = KanbanColumn.in_order_of(:name, KanbanViewHelper::KANBAN_COLUMN_ORDER.keys)
@grouped_kanban_columns = {}
kanban_column_data.each do |kanban_column|
custom_sorting_expression, sorted_records = generate_sorted_records(kanban_column)
pagy, client_requests = pagy_countless(sorted_records, items: 6, page_param: kanban_column.name)
@grouped_kanban_columns[kanban_column] = [pagy, client_requests]
end
load_cache
@pagy, @kanban_columns = pagy_countless(kanban_column_data, items: 9)
if params[:page]
render "scrollable_list"
@already_rendered = true
elsif params[:load]
render partial: "kanban_views/common_view/common_kanban_page"
@already_rendered = true
end
end
if params[:page]
render "scrollable_list"
@already_rendered = true
elsif params[:load]
render partial: "kanban_views/common_view/common_kanban_page"
@already_rendered = true
end
end
def render_partials
# Skip if already rendered
return if @already_rendered
kanban_view_details
partial_name = params[:name]
if partial_name == "classic_view"
render partial: "classic_views/classic_view"
elsif partial_name == "kanban_view"
load_cache
render partial: "kanban_views/common_view/common_kanban_page", locals: { client_request_cache: @client_request_cache }
end
end
评论
0赞
Rahul kumar
11/14/2023
但是现在,当将页面从页码 1 更改为页码 2 时,没有数据在经典视图中获取和显示
0赞
Adesoji Alu
11/15/2023
@Rahulkumar请您提醒我我回复的错误吗?
0赞
Rahul kumar
11/15/2023
在此操作错误中多次调用渲染和/或重定向,我在更改页面或滚动看板视图票证时遇到了该错误。对于这个问题,您已经给了我解决方案,现在问题已解决,但是当我将页面从第 1 页更改为第 2 页时,经典视图中没有获取和显示任何数据
0赞
engineersmnky
11/15/2023
你有一个语法错误以及一个非常尴尬的实现,同样会导致根本没有渲染调用。
评论
index
kanban_view_details
render
index
render_partials
kanban_view_details
render
render_partials
render
index
render