2012-02-13 12 views
8

Ho seguito episodi di Railscast di moduli nidificati e forme complesse. Durante la creazione di più modelli in un unico modulo, sono stato in grado di modificare, aggiornare, eliminare e creare record per i modelli di esempio che erano nidificati nel modello Batch.previsto Hash (ottenuto matrice) per param 'samples'

Ho rotto la testa da molto tempo e ho provato a cercare in giro, ma non sono riuscito a trovare la soluzione giusta per risolvere questo problema.

il file di registro di sviluppo mi dà il seguente errore.

MESSAGGIO DI ERRORE:

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

nel mio controller ho l'azione di aggiornamento come questo

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 

mio punto di vista è qualcosa di simile:

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

mio modello contiene la stessa roba:

has_many :samples, :dependent => :destroy 

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

Tutti i suggerimenti sono apprezzati.

+0

mi sono imbattuto in un problema simile quando si utilizza 'text_field_tag' nella mia forma perché ho fornito Rails-2-style args quando ho girato Rails 3. ti vedi di farlo a tutti? In caso contrario, puoi fornire l'intera vista? (forse su pastie.org) – JellicleCat

+0

Mi sono imbattuto in questo messaggio di errore quando l'array di stringhe conteneva alcuni elementi nulli. –

risposta

3

Ho avuto lo stesso problema e l'ho appena risolto.

Controllare le intestazioni della richiesta. I mine che ho visto:

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

Sono stati gli ultimi due a causare il problema. Nel mio caso ho dovuto dare a questo peso un ID per sbarazzarsi dell'errore.

13

per gli altri che si sono incontrati lo stesso problema:

Questo errore è causato quando si dispone di due campi nel modulo come:

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

poi rotaie andrà in crash con l'errore: atteso Hash (ottenuto String) per il parametro

la soluzione è abbastanza semplice: cambia "video" in qualcos'altro. es .:

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

Questo è molto utile. È strano per me che la rotaia 3.2 non abbia un errore più descrittivo per questo. – thekingoftruth

Problemi correlati