ожидаемый Hash (получил массив) для параметра 'samples' - PullRequest
9 голосов
/ 13 февраля 2012

Я следил за эпизодами Railscasts Вложенных форм и сложных форм.Во время создания нескольких моделей в одной форме я мог редактировать, обновлять, удалять и создавать записи для образцов моделей, которые были вложены в пакетную модель.

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

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

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

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

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

Ответы [ 2 ]

16 голосов
/ 08 октября 2013

для тех, кто сталкивался с такой же проблемой:

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

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

, тогда рельсы сбоят с ошибкой: ожидается хэш(получил String) для param

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

video_origin_url: 'some string'
video['url']: 'some url'
4 голосов
/ 08 октября 2012

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

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

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

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

...