Я пишу спецификацию для 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>" }
и все получилось.