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
