2015-01-27 3 views
0

Новичок в Ruby здесь, и я пытаюсь понять что-то. У меня ситуация, когда у меня есть что-то вроде следующего:Доступ к символам внутри строк в Ruby

sql = q%{select foo from bar where var1 = :ugh and var2 = :moreugh} 

Теперь, я могу напечатать переменную «SQL», но если я просто использовать путы и # {SQL} это показывает символы, как указано выше, ": тьфу".

Я хотел бы иметь возможность печатать строку sql со значениями отображаемых символов, а не с именами символов.

Любые указатели там? Большое спасибо!

+4

Что такое синтаксис 'q% {}'? – dax

+0

Символ не имеет значения, это объект, например строка или номер. – Grych

ответ

0

ваш пример кода сломана, я предполагаю, что вы хотите сделать один цитируемый-нить %q{...}

, и это именно то, что вы получаете: одну строку. поэтому там нет символов, это всего лишь одна строка. похож на '...'

0

Я думаю, если вы используете символы вместо строки, Вы можете использовать следующий запрос:

sql = "select foo from bar where var1 = 'ugh' and var2 = 'moreugh'" 

Таким образом, используя puts или #{sql} даст вам правильный вывод.

Комментарий в случае, если это не соответствует вашим требованиям.

0

У вас есть две ошибки. Для включения интерполяции необходимо использовать %Q, а переменные включены в строку в форме #{:ugh}. Итак, вы хотите:

sql = %Q{select foo from bar where var1 = #{ugh} and var2 = #{moreugh}} 
puts sql 

Но, пожалуйста, пожалуйста, не делайте этого, даже для небольшого проекта. Вы настраиваетесь на SQL-инъекцию attacj.

+0

Фактически '' # {: ugh} "==" ugh "'. – toro2k

0

Вы, наверное, хотите:

sql = "select foo from bar where var1 = '#{ugh}' and var2 = '#{moreugh}"' 

где ugh и moreugh являются переменными. Но вы должны сделать это таким образом, ваша система будет открыта для SQL Injection. Вместо этого используйте переменные bind в вашем блоке DB.

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