Как вы цитируете строки в Postgres - PullRequest
0 голосов
/ 10 февраля 2012

В Rails я использую MySQL и имею

SnCl.all(:conditions => "col3=\"xx\"") 

, но он не работает с моей базой Postgres в Heroku

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Как упоминалось в комментариях, в большинстве баз данных используются одинарные кавычки для строковых литералов и двойные кавычки для идентификаторов.MySQL довольно слабый и также принимает двойные кавычки для строковых литералов, но PostgreSQL (к счастью) довольно строг.Таким образом, вы хотите использовать одинарные кавычки:

SnCl.all(:conditions => "col3 = 'xx'")

или where:

SnCl.where("col3 = 'xx'")

или с разумным использованием возможностей цитирования драйвера базы данных:

SnCl.where("col3 = #{SnCol.connection.quote('xx')}")

И сохраняя лучшее для последнего, способ, которым разумные люди делают это, используя заполнитель или аргументы Hash для where:

SnCl.where('col3 = ?', 'xx')
SnCl.where('col3 = :col3', :col3 => 'xx')
SnCl.where(:col3 => 'xx')

Последний вариант будет наиболее идиоматичным для Rails и двух над нимбыло бы полезно для более сложных условий, когда цепочка слишком громоздка или не работает (например, когда вам нужно OR в предложении WHERE).

0 голосов
/ 10 февраля 2012

Вам лучше использовать where для вашего состояния.Посмотрите на

http://guides.rubyonrails.org/active_record_querying.html#conditions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...