从调用助手渲染部分的控制器操作返回的无内容

nocontent returned from controller action that calls helper rendering a partial

我基本上是在尝试使用一种辅助方法,该方法在我的控制器中呈现部分内容,并根据我正在尝试的变体出现无内容错误或 500 错误“无模板”。如果我只是直接从控制器操作 运行 助手中的代码,一切都很好。 rails 指南似乎没有触及这一点(使用进行渲染的辅助方法,而不是直接从控制器操作)。不幸的是,我现在没有足够的时间重构它,因为在其他地方使用了助手,而且在我看来,如果有办法在控制器操作中也使用这个助手,那是更好的选择。

有人知道怎么做吗?我正在尝试的任何事情都不适合我 :S

辅助方法

def render_call_orders_filters url_or_path_method, query_params = @query_params
    render :partial => 'call_orders/call_orders_filters', :locals => {url_or_path_method: url_or_path_method, query_params: query_params}
end

控制器动作

# GET /call_order/filters
def filters
  respond_to do |format|
    format.html {
      # This (of course) works...
      # render :partial => 'call_orders/call_orders_filters', \
      #  :locals => { url_or_path_method: method(:call_orders_path), query_params: @query_params }
      # This does not
      helpers.render_call_orders_filters(method(:call_orders_path))
      
      # This gives me a "Template is missing" 500 error
      renter text: helpers.render_call_orders_filters(method(:call_orders_path))
    }
  end
end

根据您最后的示例代码,render :partial => 有效

我觉得可以这样重构

# The helper...
def orders_filters_param_to_template(url_or_path_method, query_params = {})
  {
    partial: 'call_orders/call_orders_filters', locals: { url_or_path_method: url_or_path_method,
                                                          query_params: query_params }
  }
end

def render_call_orders_filters(url_or_path_method, query_params = @query_params)
  template_data = orders_filters_param_to_template(url_or_path_method, query_params)
  render partial: template_data[:partial],
         locals: template_data[:locals]
end

# The controller action...
def filters
  respond_to do |format|
    format.html do
      template_data = helpers.orders_filters_param_to_template(method(:call_orders_path), @query_params)

      render partial: template_data[:partial],
             locals: template_data[:locals]
    end
  end
end