渲染multilpe倍 - 在轨道中双重渲染

时间:2017-11-06 12:02:00

标签: ruby-on-rails ruby

如何避免这种双重渲染问题,我一直试图复制,但无法解决。这下面的代码有什么问题吗?

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吗?

5 个答案:

答案 0 :(得分:4)

致电performed?,检查renderredirect是否已经发生。

您可能希望将代码更改为以下内容:

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