你如何引用Postgres中的字符串

时间:2012-02-10 15:56:20

标签: ruby-on-rails postgresql activerecord ruby-on-rails-3.1 heroku

在Rails中我使用MySQL并拥有

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

但它不适用于Heroku中的Postgres DB

2 个答案:

答案 0 :(得分:1)

如评论中所述,大多数数据库对字符串文字使用单引号,对标识符使用双引号。 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来说是最惯用的,上面的两个对于更复杂的条件非常有用,在这些条件中,链接太麻烦或不起作用(例如在WHERE子句中需要OR时)。

答案 1 :(得分:0)

你最好使用where来治疗你的病情。看看

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