snacktime
2006-Jul-01 04:20 UTC
[Rails] activerecord generating wrong syntax with postgresql
I''m using activerecord outside of rails and find_first generates sql that postgresql doesnt'' like. This is rails 1.1.4, with everything up to date via "gem update". This is the command line: ruby -rrubygems seca -c ../etc/seca.cnf cert --export 1 --format pkcs12 --key root.key >root.pfx This is the error: (PGError: ERROR: argument of WHERE must be type boolean, not type integer : SELECT * FROM certificates WHERE (1) LIMIT 1) This is the code that generates the error: bc = SECA::Backend::Certificate.find_first(options[:certificate_id]) If I change it to this, it works: bc = SECA::Backend::Certificate.find(:first, :conditions => ["id = ?", options[:certificate_id]]) And this is the model: module SECA module Backend class Certificate < ActiveRecord::Base STATUS_VALID = 0 STATUS_REVOKED = 1 STATUS_EXPIRED = 2 has_one :data, :class_name => ''CertificateData'', :foreign_key => ''certificate_id'', :dependent => true #has_one :serial, :class_name => ''Serial'', :dependent => true, # :foreign_key => ''issuer_id'' # User :finder_sql to find revoked, valid, etc has_many :revoked_certificates, :class_name => ''Certificate'', :finder_sql => ''SELECT * FROM certificates WHERE '' + ''STATUS = '' + STATUS_REVOKED.to_s has_many :valid_certificates, :class_name => ''Certificate'', :finder_sql => ''SELECT * FROM certificates WHERE '' + ''STATUS = '' + STATUS_VALID.to_s has_many :certificates, :class_name => ''Certificate'', :foreign_key => ''issuer_id'' has_many :current_crl, :class_name => ''CRL'', :finder_sql => ''SELECT id, issuer_id, last_update, MAX(next_update) '' + ''AS next_update FROM crls GROUP BY id'' end end end