我想通過從我的數據庫中加入兩個表來查詢。查詢在localhost(數據庫由SQLite3驅動)中正常工作,但當它將其推送到heroku服務器(使用postgres)時,它不再工作。我嘗試了幾種方法,它可以工作,但所有這些方法都適用於本地。SQLite3和Postgres/Heroku的Ruby on Rails查詢問題
在我的控制,我有
@user = User.find(params[:id])
我想查詢使用不同的方法下面的語句,並返回相同的結果。以下是我嘗試過的不同方法。他們都用SQLite3正常工作,但不能在Heroku上用Postgres工作。
@locations_user_rated = Location.joins('INNER JOIN rates').where("rates.rateable_id = locations.id AND rates.rater_id =?" , 2)
(假設當前用戶ID = 2)
@locations_user_rated = Location.joins('INNER JOIN rates').where("rates.rateable_id = locations.id AND rates.rater_id =?" , User.find(params[:id]))
@locations_user_rated = Location.joins('INNER JOIN rates').where("rates.rateable_id = locations.id AND rates.rater_id =?" , @user)
@locations_user_rated = Location.joins('INNER JOIN rates').where('rates.rater_id' => @user).where("rates.rateable_id = locations.id")
我發現的@user
是造成問題的一個。所以我用User.find(params[:id])
代替它。但是,服務器拒絕接受。 我在Rails網站上看到,只要它在任何SQL中都能工作,它就可以在Heroku(Postgres)上運行。但在這裏並非如此。
以下是我從Heroku服務器收到的日誌。
2016-05-01T01:52:41.674598+00:00 app[web.1]: (1.3ms) SELECT COUNT(*) FROM "locations" INNER JOIN rates WHERE (rates.rateable_id = locations.id AND rates.rater_id =2) 2016-05-01T01:52:41.674760+00:00 app[web.1]: Completed 500 Internal Server Error in 10ms (ActiveRecord: 5.8ms)
2016-05-01T01:52:41.675453+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR: syntax error at or near "WHERE"
2016-05-01T01:52:41.675454+00:00 app[web.1]: LINE 1: SELECT COUNT(*) FROM "locations" INNER JOIN rates WHERE (rat...
. .^
(^顯示了導致問題的where子句)
是什麼WHERE子句的Postgres和SQLite之間的語法區別?
更新:我發現它需要on
子句。我如何在這裏添加一個on子句?
Heroku建議您以開發模式(本地)運行Postgresql。 – seph