2016-06-17 3 views
0

Мне удалось подключить мой веб-сервис к базе данных, но теперь, когда я делаю запрос, он ничего не возвращает. База данных имеет пару строк, но веб-служба возвращает ноль.Запрос ничего не возвращает

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 

Я уверен, что я делаю выполнить, но это первый раз я использую tiny_tds и я очень смущен. Благодарим вас за помощь.

[EDIT] Это 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] Я изменил код, как предложено, и возвращает результат, но он не возвращает данные из базы данных. Это результат:

{"recordsArray": ["{\" username \ ": \" \ ", \" password \ ": \" \ ", \" phone_number \ ": \" \ " , \ "profile_state \": \ "\", \ "clasa \": \ "\"} "]}

+0

Что такое 'запись [N]'? _Sidenote: _ создание json-строки у habd - очень плохая идея. Создайте хэш и вызовите 'JSON.dump (hash)' впоследствии. – mudasobwa

+0

моя база данных имеет 5 столбцов, и я создал класс AndroidTableClientsSearch, который имеет 5 элементов – meow

ответ

1

conn.execute(sql) не принимает блок, он просто возвращает результат. Послепроцесс обрабатывается рубиновым интерпретатором как «определение сироты proc» и никогда не выполняется. Вы можете попытаться поставить puts 'I am here' внутри него и увидеть, что он никогда не вызывается.

Решение будет итерация Результат:

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

эй, спасибо за предложения, это действительно помогло, но я все равно получаю пустой json так: "recordsArray": "{" username ": "", "password": "", "phone_number": "", "profile_state": "", "clasa": ""} " – meow

+0

Распечатайте' record.inspect' внутри итератора, и вы получите впечатление на что не так. – mudasobwa

+0

record.inspect показывает, что данные есть, но это как-то потеряно по пути – meow

Смежные вопросы