【发布时间】:2011-12-17 14:23:16
【问题描述】:
我的问题是我用于finder_sql 的查询在移交给 PostgreSQL 之前没有正确解析,导致数据库语法错误。
为了说明问题,我只是使用了这里的示例代码:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
我只将class_name 更改为"User",因为我没有人物模型,但这并不重要。
has_many :subscribers, :class_name => "User", :finder_sql =>
'SELECT DISTINCT people.* ' +
'FROM people p, post_subscriptions ps ' +
'WHERE ps.post_id = #{id} AND ps.person_id = p.id ' +
'ORDER BY p.first_name'
当我使用它时,我收到以下错误:
User Load (0.3ms) SELECT DISTINCT people.* FROM people p, post_subscriptions ps WHERE
ps.post_id = #{id} AND ps.person_id = p.id ORDER BY p.first_name
PGError: ERROR: Syntaxerror near »{«
LINE 1: ...ople p, post_subscriptions ps WHERE ps.post_id = #{id} AND p...
^
如您所见,#{id} 不会被替换为对象的 id,这会引发 PostgreSQL 错误。
环境
- Rails 3.1
- rvm
- PostgreSQL 9.1
- Ubuntu 11.10
- Ruby 1.9.2p290(2011-07-09 修订版 32553)[x86_64-linux]
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord finder-sql