データベースから2つのテーブルを結合してクエリを実行しようとしています。クエリはlocalhost(SQLite3で動くデータベース)で完璧に動作しますが、herokuサーバ(postgres)にプッシュするとそれ以上は動作しません。私はいくつかの方法を試して、それは動作しますが、それらのすべてはローカルで動作します。私のコントローラでSQLite3とPostgres/Heroku Ruby on Railsクエリの問題
、私は別の方法を使用して次の文を照会し、同じ結果を返すようにしようとしています
@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)
Iは@user
が問題を引き起こすものであることが判明
@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")
(現在のユーザID = 2を仮定する)。だから私はそれをUser.find(params[:id])
に置き換えました。しかし、サーバーはそれを取ることを拒否しました。 私は、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節を追加するにはどうすればいいですか?
(ローカルで)devモードでPostgresqlを実行することをお勧めします。 – seph