2012-02-13 11 views
8

Śledziłem odcinki Railscasts zagnieżdżonych formularzy i złożonych formularzy. Podczas tworzenia wielu modeli w jednym formularzu mogłem edytować, aktualizować, usuwać i tworzyć rekordy dla przykładowych modeli, które zostały zagnieżdżone w modelu wsadowym.oczekiwany Hash (got Array) dla param "próbek"

Od dłuższego czasu łamałem sobie głowę i próbowałem się przeszukiwać, ale nie mogłem znaleźć odpowiedniego rozwiązania dla rozwiązania tego problemu.

mój plik dziennika rozwoju daje mi następujący błąd.

BŁĘDZIE:

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

w moim kontrolera mam akcja aktualizacja jak to

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 

moim zdaniem jest coś takiego:

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

mój model zawiera takie same stuff:

has_many :samples, :dependent => :destroy 

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

Wszystkie sugestie są mile widziane.

+0

wpadłem na podobny problem przy użyciu 'text_field_tag' w moim formularzu bo dostarczane Rails-2-styl args kiedy biegałam szyn 3. Czy widzisz siebie w ogóle to robić? Jeśli nie, czy możesz podać cały swój widok? (być może na pastie.org) – JellicleCat

+0

Napotkano ten komunikat o błędzie, gdy tablica ciągów zawierała pewne elementy null. –

Odpowiedz

3

Miałem ten sam problem i po prostu go naprawiłem.

Sprawdź nagłówki swojego żądania. Widziałem:

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

To były dwie ostatnie, które spowodowały emisję. W moim przypadku musiałem nadać tej wadze identyfikator, aby pozbyć się błędu.

13

dla innych osób, które spotkał ten sam problem:

ten błąd jest spowodowany gdy masz dwa pola w formularzu jak:

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

następnie szyny padnie z błędu: Oczekuje Hash (GOT String) dla param

rozwiązanie jest dość proste: zmień "wideo" na coś innego. np .:

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

Jest to bardzo pomocne. Wydaje mi się dziwne, że tory 3.2 nie mają do tego bardziej opisowego błędu. – thekingoftruth