Jak wspomniano w komentarzach, większość baz danych używa pojedynczych cudzysłowów dla literałów łańcuchowych i podwójnych cudzysłowów dla identyfikatorów. MySQL jest raczej luźny i akceptuje również podwójne cudzysłowy dla literałów łańcuchowych, ale PostgreSQL jest (na szczęście) dość rygorystyczny. Więc chcesz użyć pojedynczych cudzysłowów:
SnCl.all(:conditions => "col3 = 'xx'")
lub używając where
:
SnCl.where("col3 = 'xx'")
lub z rozsądnym wykorzystaniem funkcji cytowania sterownika bazy danych:
SnCl.where("col3 = #{SnCol.connection.quote('xx')}")
I zostawiając najlepsze na koniec, tak jak robią to rozsądni ludzie, używając symbolu zastępczego lub argumentów Hash do where
:
SnCl.where('col3 = ?', 'xx')
SnCl.where('col3 = :col3', :col3 => 'xx')
SnCl.where(:col3 => 'xx')
Ostatni byłby najbardziej idiomatyczny dla Railsów, a dwa powyższe byłyby przydatne w bardziej złożonych warunkach, w których tworzenie łańcuchów jest albo zbyt kłopotliwe, albo nie działa (np. gdy potrzebujesz OR w klauzuli WHERE).