我一直收到此错误,没有将Symbol隐式转换为整数。我搜索了这个错误但是并没有真正理解它。代码位于底部。一旦它到达“如果q [:text_field] .is?Array”,那就是它给出错误并且我确定其余的代码是错误的。但不知道如何解决它。
pages = Vovici::API.new(@pid).survey_structure
这是我用上面的代码调用的api数据的示例。
[{:q_fill_in=>
{:heading=>{:text=>"1"},
:instructions=>{:text=>nil},
:body=>{:text=>"Pac"},
:list_caption=>{:text=>{:@type=>"plain"}},
:total_label=>{:text=>"Total"},
:text_field=>
[{:label=>{:text=>"first"},
:preselection=>{:text=>{:@type=>"plain"}},
:symbol=>{:text=>{:@type=>"plain"}},
:@id=>"1",
:@dbheading=>"Q1_1",
:@row=>"0",
:@size=>"20",
:@xmltype=>"text",
:@required=>"false",
:@compare_expression=>"-1",
:@topic_first=>"true",
:@slider=>"false",
:@sliderstep=>"1",
:@published=>"true",
:@usecalendarpopup=>"true",
:@insert_symbol_left=>"false",
:@label_width=>"3",
:@text_area_width=>"9"},
{:label=>{:text=>"id"},
:preselection=>{:text=>{:@type=>"plain"}},
:symbol=>{:text=>{:@type=>"plain"}},
:@id=>"2",
:@dbheading=>"Q1_2",
:@row=>"0",
:@size=>"20",
:@xmltype=>"text",
:@required=>"false",
:@compare_expression=>"-1",
:@topic_first=>"true",
:@slider=>"false",
:@sliderstep=>"1",
:@published=>"true",
:@usecalendarpopup=>"true",
:@insert_symbol_left=>"false",
:@label_width=>"3",
:@text_area_width=>"9"}],
:@dbheading=>"Q1"}
这是我的rb文件中的代码
def process
pages = Vovici::API.new(@pid).survey_structure
pages.each do |page|
if page[:q_fill_in]
process_fill_in(*page[:q_fill_in])
end
end
end
def process_fill_in(*questions)
questions.each do |q|
if q[:text_field].is? Array
sub_qs = q[:text_field]
else
sub_qs = [q[:text_field]]
end
q_text = clean_question_text(q[:body][:text])
sub_qs.each do |sq|
sub_text = clean_question_text(sq[:label][:text])
q_name = [q_text, sub_text.reject { |i| i.nil? || i.empty? }.join("--")]
@survey.questions.create!(qheader: sq[:@dbheading], qtext: q_name)
end
end
end
def clean_question_text(text)
match = /( )?(<.*?>)?(.+)( )?(<\/.*>)?/.match(text)
match[3]
end
有人可以帮忙吗?
答案 0 :(得分:0)
此错误表示您已在阵列上使用[]
,但您已经传递了对阵列没有意义的内容。在这种特殊情况下,它告诉您,您尝试用作哈希的q
实际上是一个数组。
这种情况正在发生,因为process_fill_in(*page[:q_fill_in])
正在将哈希转换为键值对数组(因为*)。我不确定你为什么会在那里得到一个splat。