2010-09-07 13 views
5

Sto scrivendo una specifica per il metodo di un controller create:errore di Rubino: "Simbolo come indice di matrice"

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 

Ma quando lo eseguo, ottengo l'errore "Symbol as array index" nel controller, quando cerca per elaborare questo codice:

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

Qualche idea? Grazie

EDIT 1:

non ho scritto il controller, ma funziona con test manuale. Il punto di vista che chiama il mio controller dispone di questo codice:

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

Forse la mia spec non è buono?

EDIT 2:

problema risolto grazie alla risposta di Rishav. Non ho capito che nella vista, campaign[adtag_attributes][] significa che campaign[adtag_attributes] è una matrice.

Così ho appena sostituito

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

da

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

e ha funzionato.

risposta

5

params [: campaign] [: adtag_attributes] è un hash non un array, quindi quando esegue il metodo "each_with_index" sull'hash vede il simbolo ": code" come l'indice e genera quell'errore.

Si può solo fare questo

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

basta cambiare a seguire nella prova

params[:campaign][:adtag_attributes] = []
params[:campaign][:adtag_attributes] << somedata

speriamo che questo funziona

+0

non ho scritto il controller, ma funziona con test manuali. Vedi il mio post di modifica per maggiori dettagli. –

+0

controllare l'aggiornamento sopra –

+0

Sì, funziona. Grazie ! –