Ошибка Ruby: «Символ как индекс массива» - PullRequest
5 голосов
/ 08 сентября 2010

Я пишу спецификацию для create метода контроллера:

describe "POST create" do

    it "should create an adtag with valid params" do
      campaign = Campaign.make

      campaign_attributes = Hash.new
      campaign_attributes[:adtag_attributes] = Hash.new
      campaign_attributes[:adtag_attributes][:code] = "<h1>Sample code</h1>"

      post 'create', { :id => campaign.id, :campaign => campaign_attributes }
    end

end

Но когда я его запускаю, в контроллере появляется ошибка "Symbol as array index", когда он пытается обработать этот код:

params[:campaign][:adtag_attributes].each_with_index do |attributes,index|
  # some code
end

Есть идеи? Спасибо

РЕДАКТИРОВАТЬ 1:

Я не написал контроллер, но он работает с ручным тестированием. Представление, которое вызывает мой контроллер, имеет следующий код:

fields_for 'campaign[adtag_attributes][]', adtag do |adtag_form|

Может быть, мои спецификации не очень хороши?

РЕДАКТИРОВАТЬ 2:

Проблема решена благодаря ответу Ришава. Я не понял, что в представлении campaign[adtag_attributes][] означает, что campaign[adtag_attributes] является массивом.

Так я только заменил

campaign_attributes = Hash.new
campaign_attributes[:adtag_attributes] = Hash.new
campaign_attributes[:adtag_attributes][:code] = "<h1>Sample code</h1>"

от

campaign_attributes = Hash.new
campaign_attributes[:adtag_attributes] = Array.new
campaign_attributes[:adtag_attributes] << { :code => "<h1>Sample code</h1>" }

и все получилось.

1 Ответ

5 голосов
/ 08 сентября 2010

params [: campaign] [: adtag_attributes] является хешем, а не массивом, поэтому, когда он запускает метод each_with_index для хеша, он видит символ «: code» в качестве индекса и выдает эту ошибку.

Вы можете просто сделать это

 params[:campaign][:adtag_attributes].each do |key,value|
    #some code
 end

просто перейти к следующему в тесте

params[:campaign][:adtag_attributes] = [] <br/> params[:campaign][:adtag_attributes] << somedata

надеюсь, этоработы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...