加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby错误:“符号作为数组索引”

发布时间:2020-12-17 03:12:05 所属栏目:百科 来源:网络整理
导读:我正在为控制器的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_attribut
我正在为控制器的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的回答,问题解决了.我不明白,在视图中,广告系列[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>" }

它成功了.

解决方法

params [:campaign] [:adtag_attributes]是一个哈希而不是一个数组,所以当它在哈希上运行“each_with_index”方法时,它会看到“:code”符号作为索引并抛出该错误.

你可以这样做

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

只需在测试中更改为以下内容

??params [:campaign] [:adtag_attributes] = []??params [:campaign] [:adtag_attributes]<<一些数据 希望这有效

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读