2016-08-02 5 views
0

Ich habe diesen Fehler erhalten, keine implizite Umwandlung von Symbol in Integer. Ich habe nach diesem Fehler gesucht, verstehe ihn aber nicht wirklich. Der Code befindet sich unten. Sobald es zu diesem kommt "wenn q [: text_field] .is? Array" das ist, wenn es den Fehler gibt und ich bin sicher, dass der Rest dieses Codes falsch ist. Aber keine Ahnung, wie man es beheben kann.keine implizite Umwandlung von Symbol in Integer, Rails 4

pages = Vovici::API.new(@pid).survey_structure 

Dies ist ein Beispiel für die API-Daten, die ich mit dem obigen Code anrufe.

[{: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"} 

Dies ist Code aus meiner rb Datei

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 

Kann jemand bitte helfen?

Antwort

0

Dieser Fehler bedeutet, dass Sie [] für ein Array verwendet haben, aber Sie haben etwas übergeben, das für ein Array keinen Sinn ergibt. In diesem speziellen Fall sagt es Ihnen, dass q, die Sie versuchen, als ein Hash zu verwenden, tatsächlich ein Array ist.

Dies passiert, weil process_fill_in(*page[:q_fill_in]) den Hash in ein Array von Schlüssel/Wert-Paaren (wegen der *) verwandelt. Ich bin mir nicht sicher, warum du überhaupt einen Splat hast.

+0

Ich habe es so gemacht, weil von den api-Daten Sie eine Reihe von Hashes sehen, aber offensichtlich ist das falsch. Haben Sie irgendwelche Vorschläge, was ich tun kann, um es zu beheben? –

+0

Soweit ich das sagen kann, brauchen Sie diesen Splat überhaupt nicht (und wahrscheinlich auch nicht in process_fill_in). –