Ich schreibe gerade eine Spezifikation für die create
Verfahren eines Controllers :
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
Aber wenn ich es ausführe, erhalte ich den Fehler "Symbol as array index"
im Controller, wenn er versucht, diesen Code zu verarbeiten:
params[:campaign][:adtag_attributes].each_with_index do |attributes,index|
# some code
end
Irgendeine Idee? Danke
EDIT 1:
Ich habe den Controller nicht geschrieben, aber er funktioniert mit manuellen Tests. Die Ansicht, die meinen Controller aufruft, hat diesen Code:
fields_for 'campaign[adtag_attributes][]', adtag do |adtag_form|
Vielleicht ist meine Spezifikation nicht gut?
EDIT 2:
Problem dank der Antwort von Rishav gelöst. Ich habe das in der Ansicht nicht verstanden, campaign[adtag_attributes][]
bedeutet, dass campaign[adtag_attributes]
ist ein Array.
Ich habe also einfach die
campaign_attributes = Hash.new
campaign_attributes[:adtag_attributes] = Hash.new
campaign_attributes[:adtag_attributes][:code] = "<h1>Sample code</h1>"
von
campaign_attributes = Hash.new
campaign_attributes[:adtag_attributes] = Array.new
campaign_attributes[:adtag_attributes] << { :code => "<h1>Sample code</h1>" }
und es hat geklappt.