2016-05-01 150 views
0

我想通过从我的数据库中加入两个表来查询。查询在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子句?

+1

Heroku建议您以开发模式(本地)运行Postgresql。 – seph

回答

0

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