我正在为 Controller 的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
但是当我运行它时,当它尝试处理此代码时,我在 Controller 中收到错误
"Symbol as array index"
:params[:campaign][:adtag_attributes].each_with_index do |attributes,index|
# some code
end
任何想法 ?
谢谢
编辑1:
我还没有编写 Controller ,但是它可以进行手动测试。
调用我的 Controller 的 View 具有以下代码:
fields_for 'campaign[adtag_attributes][]', adtag do |adtag_form|
也许我的规范不好?
编辑2:
由于Rishav的回答,问题得以解决。我不了解该 View 中的
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>" }
并解决了。
最佳答案
params [:campaign] [:adtag_attributes]是一个哈希,而不是一个数组,因此在哈希上运行“each_with_index”方法时,它将“:code”符号视为索引并抛出该错误。
你可以做到这一点
params [:campaign] [:adtag_attributes]。每个| key,value |
#一些代码
结尾
只是在测试中更改为关注 params[:campaign][:adtag_attributes] = []
params[:campaign][:adtag_attributes] << somedata
希望这有效
关于ruby-on-rails - Ruby错误: "Symbol as array index",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3663500/