ожидаемый хэш (получил массив) для параметра «образцы»

Я следил за эпизодами 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

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


person A1aks    schedule 13.02.2012    source источник
comment
Я столкнулся с похожей проблемой при использовании text_field_tag в моей форме, потому что я предоставил аргументы в стиле Rails-2, когда запускал Rails 3. Вы вообще видите, что делаете это? Если нет, можете ли вы полностью изложить свое мнение? (возможно, на pastie.org)   -  person JellicleCat    schedule 15.06.2012
comment
Я столкнулся с этим сообщением об ошибке, когда массив строк содержал несколько нулевых элементов.   -  person Kevin Bullaughey    schedule 21.08.2015


Ответы (3)


для других, кто столкнулся с той же проблемой:

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

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

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

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

video_origin_url: 'some string'
video['url']: 'some url'
person Siwei    schedule 08.10.2013
comment
Это очень полезно. Мне кажется странным, что в rails 3.2 нет более описательной ошибки для этого. - person thekingoftruth; 29.06.2015

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

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

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

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

person theschmitzer    schedule 08.10.2012

Я также получил эту ошибку Invalid request parameters: expected Hash (got Array) for param 'cell'.

В моем случае я неправильно сформировал имя поля, например

f.text_field :name, name: 'cell[name][]'

это вызывало ошибку. Теперь я сделал следующее, и ошибка исчезла: -

f.text_field :name, name: 'cell[][name]'

в этом решении я фактически пытался получить данные в формате массива.

person Shristina    schedule 17.12.2019