没有将Symbol隐式转换为Integer,rails 4

时间:2016-08-02 19:39:45

标签: ruby-on-rails ruby-on-rails-4

我一直收到此错误,没有将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 = /(&nbsp;)?(<.*?>)?(.+)(&nbsp;)?(<\/.*>)?/.match(text)
  match[3]
end

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

此错误表示您已在阵列上使用[],但您已经传递了对阵列没有意义的内容。在这种特殊情况下,它告诉您,您尝试用作哈希的q实际上是一个数组。

这种情况正在发生,因为process_fill_in(*page[:q_fill_in])正在将哈希转换为键值对数组(因为*)。我不确定你为什么会在那里得到一个splat。