SQLite3和Postgres / Heroku Ruby on Rails查询问题

时间:2016-05-01 02:08:02

标签: ruby-on-rails ruby postgresql heroku sqlite

我试图通过连接数据库中的两个表来进行查询。该查询在localhost(由SQLite3支持的数据库)中完美地工作,但是当它将它推送到heroku服务器(使用postgres)时,它不再起作用。我尝试了一些方法并且它可以工作,但它们都在本地工作。

在我的控制器中,我有

@user = User.find(params[:id])

我试图通过使用不同的方法查询以下语句并返回相同的结果。以下是我尝试过的不同方法。所有这些都完全适用于SQLite3,但不适用于Postgres的Heroku。

@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子句?

1 个答案:

答案 0 :(得分:0)

回答here。我发现它需要ON子句并且不要使用WHERE语句来指定它。改为使用ON子句。