2012-02-13 8 views
8

He estado siguiendo episodios de Railscasts de formularios anidados y formularios complejos. Durante el tiempo de creación de modelos múltiples en un solo formulario, pude editar, actualizar, eliminar y crear registros para modelos de muestra que estaban anidados en el modelo de Batch.esperado Hash (get Array) para param 'samples'

He estado rompiendo la cabeza desde hace mucho tiempo e intenté buscar pero no he podido encontrar la solución adecuada para resolver este problema.

mi archivo de registro de desarrollo me da el siguiente error.

MENSAJE DE ERROR:

Status: 500 Internal Server Error 
    expected Hash (got Array) for param `samples' 

en mi controlador Tengo la acción de actualización como esto

def update 
    @batch = Batch.find(params[:id]) 

    respond_to do |format| 
     if @batch.update_attributes(params[:batch]) 
     flash[:notice] = 'Successfully updated Batch.' 
     format.html { redirect_to(@batch) } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @batch.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

mi punto de vista es algo como esto:

<%= form_for @batch do |f| %> 
...... 
<%= f.fields_for :samples do |s_form| %> 
.... s_form things 
<% end %> 
<% end %> 

mi modelo contiene la misma cosas:

has_many :samples, :dependent => :destroy 

    accepts_nested_attributes_for :samples, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true 

Todas las sugerencias son apreciadas.

+0

me encontré con un problema similar cuando se utiliza 'text_field_tag' en mi forma debido a que suministré Rails-2-estilo args cuando estaba corriendo Rails 3. ¿Te ves haciendo eso en absoluto? Si no, ¿puede proporcionar la totalidad de su punto de vista? (tal vez en pastie.org) – JellicleCat

+0

Me encontré con este mensaje de error cuando la matriz de cadenas contenía algunos elementos nulos. –

Respuesta

3

Tuve el mismo problema y lo solucioné.

Compruebe los encabezados de su solicitud. Mino vi:

weight[2][name]:Tests 
weight[2][value]:75 
weight[1][name]:Quizzes 
weight[1][value]:25 
weight[][name]:Foo 
weight[][value]: 

que era la última dos que causó el problema. En mi caso, tuve que darle a este peso una identificación para eliminar el error.

13

para otros que cumplieron con el mismo problema:

Este error se produce cuando se tiene dos campos en su forma como:

video: 'some string' 
video['url']: 'some url' 

continuación, los carriles se bloquea con el error: se esperaba Hash (GOT Cadena) para el parámetro

la solución es bastante simple: cambiar 'video' a otra cosa. ej .:

video_origin_url: 'some string' 
video['url']: 'some url' 
+1

Esto es muy útil. Me parece extraño que los rieles 3.2 no tengan un error más descriptivo para esto. – thekingoftruth