2015-06-25 4 views
-1

Я изучаю Ruby в данный момент, и я написал код ниже, однако он вызывает ошибки при запуске.Ruby `if` not working

Идея состоит в том, что канал будет вставлен только в базу данных, если он еще не присутствует в базе данных (проверен методом exists?).

def exists?(channel) 
    rs = @con.query("SELECT * FROM channels WHERE name = #{channel}") 
    return true unless rs.empty? 
end 

channels.each do |channel| 
    @con.query("INSERT INTO channels (name, timestamp) VALUES ('#{channel}', '#{Time.now.to_i}')") unless channel.exists? 

Вот сообщение об ошибке показано, как только я включаю этот код:

неопределенный метод `существует» для "# channel1": String

Есть ошибки в коде, который я написал?

+2

Это зависит от того, что такое «каналы». Похож на массив строк. Строки не имеют 'существует? ', Определенные внутри. –

+0

Извините, что это за «каналы», я проверяю один «канал»? – Jack

+0

Точно, 'channel' происходит от' channels'. –

ответ

0

Я думаю, вы смущены синтаксисом. Если вы хотите использовать свой вышеописанный метод, вы должны иметь это:

@con.query("INSERT INTO channels (name, timestamp) VALUES ('#{channel}', '#{Time.now.to_i}')") unless exists?(channel) 
+0

Хмм, теперь я получаю 'У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 1', что-то делать с методом 'exist? ', но он выглядит нормально для меня по назначению ... – Jack

+0

Время для некоторая отладочная печать. Вы получаете ошибку в sql-запросе? Отлаживайте-отпечатывайте это и изучайте, что фактически генерируется. –

+0

Я предполагаю, что вам не хватает котировок вокруг интерполяции 'channel'. Или что-то вроде этого –