2010-09-07 26 views
5

Bir kumandanın create yöntemi için bir spec yazıyorum "dizi indeksi olarak Sembol":Yakut hatası:

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 

Ama bunu çalıştırdığınızda, ben denetleyicisi hata "Symbol as array index" olsun, bu çalıştığında Bu kod işlenir:

Herhangi bir fikir? Teşekkür

DÜZENLEME 1:

ben denetleyicisi yazmadım, ama manuel test ile çalışır.

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

Belki benim Spec iyi değil: benim denetleyicisi çağırır görünümü bu kodu vardır?

DÜZENLEME 2: Rishav cevabı

Sorun çözüldü teşekkürler. Bu açıdan bakmadım, campaign[adtag_attributes][], campaign[adtag_attributes] dizesinin bir Dizidir.

Yani sadece

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

tarafından

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

yerini ve mükemmel çalıştı.

cevap

5

params [: kampanya] [: adtag_attributes] karma değil bir dizidir, bu yüzden "her_with_index" yöntemini karma üzerinde çalıştırdığında indeks olarak ": code" sembolünü görür ve bu hatayı atar.

Sadece bu

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

sadece test şu şekilde değişir yapabilir

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

umarım bu ben denetleyicisi yazmadım

+0

çalışır, ancak manuel test ile çalışır. Daha fazla bilgi için gönderi düzenime bakın. –

+0

güncellemesini kontrol edin –

+0

Evet, işe yarıyor. Teşekkürler ! –