Я пишу спецификацию для метода 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
Но когда я запускаю его, я получаю ошибку «Символ как индекс массива»
в контроллере, когда он пытается обработать этот код:
params[:campaign][:adtag_attributes].each_with_index do |attributes,index|
# some code
end
Есть идеи? Спасибо
РЕДАКТИРОВАТЬ 1:
Я не писал контроллер, но он работает с ручным тестированием. Представление, которое вызывает мой контроллер, имеет следующий код:
fields_for 'campaign[adtag_attributes][]', adtag do |adtag_form|
Может быть, моя спецификация не подходит?
РЕДАКТИРОВАТЬ 2:
Проблема решена благодаря ответу Ришава. Я не понял, что в представлении кампания [adtag_attributes] []
означает, что кампания [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>" }
, и это сработало.