如何避免这种双重渲染问题,我一直试图复制,但无法解决。这下面的代码有什么问题吗?
def check_count
assign_values_from_params
if count >= failed_count
render partial: params[:view_name], layout: false and return
else
render text: 'works' and return
end
end
def assign_values_from_params
# code
# code
# code
if @date.blank?
redirect_to main_index_path and return
end
if @counted_obj != 5
# call one function
end
end
我也应该这样尝试Double render error rails吗?
答案 0 :(得分:4)
致电performed?
,检查render
或redirect
是否已经发生。
您可能希望将代码更改为以下内容:
def check_count
assign_values_from_params
return if performed?
if count >= failed_count
render(partial: params[:view_name], layout: false)
else
render(text: 'works')
end
end
def assign_values_from_params
# code
if @date.blank?
redirect_to(main_index_path) and return
end
# code
end
答案 1 :(得分:2)
从render partial: params[:view_name], layout: false and return
移除return语句,因为渲染后它将导致返回nil。从两行中删除return语句,它应该被修复。
它应该看起来像render text: 'works'
。
答案 2 :(得分:1)
渲染后使用return
将返回nil
,因此我建议您从两个渲染中删除return
,这应该是这样的。
if tmp_count >= failed_count
render partial: params[:view_name], layout: false
else
render text: 'works'
end
希望这适合你。
答案 3 :(得分:1)
首先,根据我的说法,检查是否正在调用任何渲染。通过你的代码,它没有显示,但可能在内部被调用。那你可以打电话表演吗?在你的控制器中检查是否已经调用了渲染:
performed? # => false
render partial: params[:view_name], layout: false
performed? # => true
如果执行调用?第一次说是真的,那么你必须检查你的代码。
答案 4 :(得分:1)
试试这个,看看它是否适合你。
def check_count
assign_values_from_params
end
def assign_values_from_params
# code
# code
# code
if @date.blank?
redirect_to main_index_path and return
else
if @counted_obj != 5
# call one function
end
if count >= failed_count
render partial: params[:view_name], layout: false and return
else
render text: 'works' and return
end
end
end