2012-02-13 2 views
8

Я слежу за эпизодами Railscasts вложенных форм и сложных форм. За время создания нескольких моделей в одной форме я смог редактировать, обновлять, удалять и создавать записи для образцов моделей, которые были вложены в модель Batch.ожидаемый хэш (полученный массив) для образцов param '

Я долгое время ломаю голову и тоже искал, но не мог найти правильное решение для решения этой проблемы.

Мой файл журнала разработки дает мне следующую ошибку.

ОШИБКА СООБЩЕНИЕ:

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

в мой контроллер у меня есть действие обновления, как этот

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 

мой взгляд, что-то вроде этого:

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

моя модель содержит то же самое материал:

has_many :samples, :dependent => :destroy 

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

Все предложения приветствуются.

+0

Я столкнулся с аналогичной проблемой при использовании 'text_field_tag' в моей форме, потому что поставляется Rails-2-стиль арг, когда я бегала Rails 3. Как вы видите, что делаете это вообще? Если нет, можете ли вы представить всю свою точку зрения? (возможно, на pastie.org) – JellicleCat

+0

Я столкнулся с этим сообщением об ошибке, когда массив строк содержал несколько нулевых элементов. –

ответ

3

У меня была такая же проблема, и я просто ее исправил.

Проверьте заголовки вашего запроса. Я, я видел:

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

Это были последние два, которые вызвали проблему. В моем случае я должен был дать этому весу идентификатор, чтобы избавиться от ошибки.

13

для других людей, которые встречались с той же проблемой:

эта ошибка возникает, когда у вас есть два поля в вашей форме, как:

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

тогда рельсы будут врезаться с ошибкой: ожидался Hash (получили строки) для параметра

Решение довольно простое: измените «видео» на что-то еще. например .:

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

Это очень полезно. Мне кажется странным, что для рельсов 3.2 нет более описательной ошибки. – thekingoftruth

Смежные вопросы