我有問題,我使用的查詢finder_sql
未被正確解析之前,它被交給PostgreSQL導致數據庫語法錯誤。finder_sql不解析字符串與Rails
爲了說明我剛纔使用的示例代碼問題就在這裏:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
我只改class_name
到,因爲我沒有一個人模型,但是這並不重要位置。
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}
不與隨後引發的PostgreSQL錯誤的對象的ID所取代。
環境
- 滑軌3.1
- RVM
- 的PostgreSQL 9.1
- 的Ubuntu 11.10
- 紅寶石1.9.2p290(2011-07-09的修訂32553)[x86_64的Linux的]
的排序。真正的問題是,AR的文檔不完整,文檔中的示例已被破壞(或者可能過時並且無法維護)。使用標準的Rails東西是首選的方法,但並非總是可行,如果你需要使用':finder_sql',那麼它幾乎肯定必須是lambda,而不是簡單的字符串。 – 2011-12-18 01:45:31