Me sale el siguiente error al ejecutar el siguiente código en un controlador. Tenga en cuenta la :formats=>[:json] en el error, aunque :formats=>[:html] se pasa en render_to_string

¿Qué estoy haciendo mal? Alguna idea?
En realidad, el código de abajo funcionaba bien antes, no estoy seguro qué cambios han influido en este error.
Versión de Rails: 3.2.8

por cierto, la plantilla está definitivamente en el lugar: loc/_search_details.html.erb

Pregunta extra: ¿dónde puedo encontrar la documentación de la api muestra qué parámetros se pueden pasar a render_to_string y cómo funciona?

De Error:
ActionView::MissingTemplate (Falta parcial de la loc/search_details con {:locale=>[:en], :formatos=>[:json], :controladores=>[:erb, :generador :café]}.

  respond_to do |format|
    format.json { 
      @detail_str = render_to_string(:partial => 'loc/search_details', :layout => false, :formats=>[:html], :locals => {:beer_results => @beer_results})
      @list_str = render_to_string(:partial => 'loc/search_list', :layout => false,:formats=>[:html], :locals => {:beer_results => @beer_results})
      render :json => {:results => @results_hash, :result_details => @detail_str, :result_list => @list_str }

      }
  end
No creo que :format es un parámetro válido para pasar a render.
Yo no estoy usando :formato :formatos de
Verdadero. No creo que es un parámetro válido bien.

OriginalEl autor vrepsys | 2012-12-04

5 Comentarios

  1. 4

    Ver esta pregunta y este problema. Puesto que usted está haciendo una petición JSON su render_to_string está a la espera de su parcial a ser _search_details.json.erb. Usted puede proporcionar un adicional de JSON parcial, cambiar el nombre de la parcial o agregar esto a la parcial <% self.formats = [:json, :html] %>, o como alternativa, pruebe la solución en respuesta a esa pregunta.

    Te equivocas, el :formats => [:html] parámetro para render_to_string hace que lo que se busca _search_details.html.erb primera. He probado a mí mismo, y funciona, al menos en Rails 3.2.9.
    <% auto.formatos = [:json, :html] %> — esto realmente funciona
    Necesitaba tanto :formatos => [:html] pasaron a render_to_string método, y <% auto.formatos = [:json, :html] %> en el parcial para conseguir que funcione correctamente.

    OriginalEl autor David

  2. 4

    Lo que si intenta

    render_to_string(:partial => 'loc/search_details.html.erb', :layout => false, :locals => {:beer_results => @beer_results})

    O

    with_format("html") { render_to_string(:partial => 'loc/search_details', :layout => false, :locals => {:beer_results => @beer_results}) }

    Y agregar el método

    private
    def with_format(format, &block)
      old_format = @template_format
      @template_format = format
      result = block.call
      @template_format = old_format
      return result
    end

    Fuente: ¿Cómo obtengo un parcial de un formato diferente en Rails?

    La primera solución que da el mismo mensaje de advertencia: mismo mensaje de ADVERTENCIA: Pasando de una plantilla de controlador en el nombre de la plantilla está en desuso. Usted puede simplemente eliminar el nombre del controlador o pasar el render :controladores => [:erb] en su lugar.
    Intenta pasar :controladores o hizo el segundo de la solución de trabajo para usted?
    pasando los controladores no ayuda, hay otro mismo mensaje de advertencia sobre :formatos html, si puedo añadir formatos estoy de vuelta con el código que tengo y no funciona. La segunda solución parece un sucio hack 🙂 voy a intentarlo un poco más tarde.
    Es un sucio hack, pero por otro lado lo que usted está tratando de hacer es también la clase de sucio, por lo que la solución se ajusta a la necesidad 😉
    «por cierto, la plantilla está definitivamente en el lugar: loc/search_details.html.erb» lol, espero que hayas cometido un error tipográfico no, no sabes que parcial de nombres de archivo que comienzan con un carácter de subrayado espero 🙂 Ya he probado tu código en un espacio en blanco rails app y funciona bien, con el nombre correctamente parcial de curso.

    OriginalEl autor mrbrdo

  3. 2

    Sólo en caso de que alguien más stubmles en esto, si usted es la representación de una cadena, sólo tienes que hacer la representación fuera del contexto del formato.json bloque. En tu ejemplo:

    respond_to do |format|
      @detail_str = render_to_string(:partial => 'loc/search_details', :locals => {:beer_results => @beer_results})
      @list_str = render_to_string(:partial => 'loc/search_list', :locals => {:beer_results => @beer_results})
      format.json {     
          render :json => {
            :results => @results_hash, 
            :result_details => @detail_str, 
            :result_list => @list_str 
          }
    
      }
    end

    De esta manera, usted no tiene que especificar los formatos de la presentación o es falsa.

    OriginalEl autor onetwopunch

  4. 1

    De tratar de pasar

    :format => :html

    Lugar de

    :formats => [:html]
    ningún efecto en absoluto, de todos modos thx
    Esta es la suficiente como para RoR4, gracias.
    :formats obras en 4.2.1, mientras que :format no.

    OriginalEl autor mrbrdo

  5. 1

    Sólo en caso de que alguien tiene el mismo problema, he aquí lo que funcionó para mí.

    El mensaje de error que tuve al uso de render_to_string era exactamente el mismo que en la pregunta, se completa con la format desajuste. Sin embargo, no fue realmente el origen del problema.

    El problema era que mi aplicación fue i18n-ed y la configuración regional se ha dado en la dirección URL. Mi routes.rb se parece a esto:

    Quoties::Application.routes.draw do
    
      scope "(:locale)", locale: /en|pl/ do
        # all routes go here
      end
    
    end

    y mi application_controller.rb se veía así:

    class ApplicationController < ActionController::Base
      protect_from_forgery
    
      before_filter :set_locale
    
      def default_url_options(options={})
        locale = I18n.locale
        locale = nil if locale == :en
        { locale: locale  }
      end
    
      def set_locale
        parsed_locale = params[:locale] || 'en'
        I18n.locale = I18n.available_locales.include?(parsed_locale.to_sym) ? parsed_locale : nil
      end
    end

    (Es un poco ajustado versión de una solución que he encontrado un sitio en el Internet.)

    Funcionó bastante bien en la mayoría de los lugares. Sin embargo, resultó ser la causa de la «falta parcial de error» cuando yo estaba usando una ruta auxiliar en el parcial, es decir

    <%= item_path(item) %>

    La solución que ayudó fue la sustitución de la línea anterior con:

    <%= item_path(item, locale: params[:locale]) %>

    No tengo idea de por qué default_url_options no funcionan en este caso y por qué Rieles levantó una rara excepción.

    <% self.formats = [:html, :json] %> solución se sugirió anteriormente sólo hizo que el mensaje de error más clara, de modo que al menos se cambió a ‘ninguna ruta coincide con…’ lanzado en item_path.

    OriginalEl autor kamilk

Dejar respuesta

Please enter your comment!
Please enter your name here