2016-06-17 9 views
0

Ich habe es geschafft, meinen Webservice mit der Datenbank zu verbinden, aber jetzt, wenn ich eine Anfrage mache, gibt es nichts zurück. Die Datenbank enthält einige Zeilen, der Webdienst gibt jedoch null zurück.Anfrage gibt nichts zurück

get '/all_users/' do 
    conn = TinyTds::Client.new(username: 'nicole', password: 'pass', dataserver: 'Nikki-PC\Mydatabase', database: 'Thedatabase') 
    recordsArray = "{\"clientList\":[" 
    clientArray = Array.new 
    sql = 'select * from dbo.ServerUsers' 
    records = conn.execute(sql) do |record| 
    client = AndroidtableClientsSearch.new(record[0], record[1], record[2], record[3], record[4]) 
    clientArray << client.to_s 
    end 
    recordsArray << clientArray.join(',') 
    recordsArray << "]}" 
    recordsArray 
end 

Ich bin mir ziemlich sicher, dass ich die execute tue, aber dies ist das erste Mal, dass ich tiny_tds verwende und ich bin sehr verwirrt. Vielen Dank für Ihre Hilfe.

[EDIT] Dies ist AndroidClientsSearch:

class AndroidtableClientsSearch 
    def initialize(username, password, phone_number, profile_state, clasa) 
    @username = username 
    @password = password 
    @phone_number = phone_number 
    @profile_state = profile_state 
    @clasa = clasa 
end 

def to_s 
    { :username => "#{@username}", :password => "#{@password}", :phone_number => "#{@phone_number}", :profile_state => "#{@profile_state}", :clasa =>"#{@clasa}"}.to_json 
end 
end 

[UPDATE] ich den Code geändert haben, wie vorgeschlagen, und es gibt ein Ergebnis, aber es gibt nicht die Daten aus der Datenbank. Dies ist ein Ergebnis:

{"recordsArray": ["{\ username \": \ "\", \ "password \": \ "\", \ "phone_number \": \ "\" , \ "Profilstatus \": \ "\", \ "Klasse \": \ "\"} "]}

+0

Was ist 'record [N]':

würde die Lösung das Ergebnis zu Iterierte sein? _Sidenote: _ Erstellen einer JSON-Zeichenfolge von Habd ist eine sehr schlechte Idee. Erstellen Sie einen Hash und rufen Sie anschließend 'JSON.dump (hash)' 'auf. – mudasobwa

+0

meine Datenbank hat 5 Spalten und ich habe die Klasse AndroidTableClientsSearch, die 5 Elemente hat – meow

Antwort

1

conn.execute(sql) akzeptiert keinen Block, es gibt einfach ein Ergebnis zurück. Die nachfolgende Prozedur wird von einem Ruby-Interpreter als "verwaiste Prozedurdefinition" behandelt und niemals ausgeführt. Sie könnten versuchen, puts 'I am here' darin zu setzen und zu sehen, dass es nie aufgerufen wird.

get '/all_users/' do 
    conn = TinyTds::Client.new(...) 
    sql = 'select * from dbo.ServerUsers' 

    #       ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓ iterate!!! 
    records = conn.execute(sql).each_with_object([]) do |record, memo| 
    client = AndroidtableClientsSearch.new(*5.times.map { |i| record[i] }) 
    memo << client.to_s 
    end 

    require 'json' 
    JSON.dump(clientList: records) 
end 
+0

hey, danke für die Vorschläge, es hat wirklich geholfen, aber ich bekomme immer noch eine leere json als so: "recordsArray": "{" username ": "", "password": "", "phone_number": "", "profile_state": "", "clasa": ""} " – meow

+0

" record.inspect "innerhalb des Iterators ausdrucken und eine Impression erhalten Was läuft falsch? – mudasobwa

+0

record.inspect zeigt, dass die Daten dort sind, aber es ist irgendwie auf dem Weg verloren – meow