我正在为控制器的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:
由于Rishav的回答,问题解决了。我不明白,在视图中,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>" }
它已经成功了。
答案 0 :(得分:5)
你可以这样做
params[:campaign][:adtag_attributes].each do |key,value| #some code end
只需在测试中更改为以下内容
params[:campaign][:adtag_attributes] = []
params[:campaign][:adtag_attributes] << somedata
希望这有效