2016-05-01 15 views
0

データベースから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節を追加するにはどうすればいいですか?

+1

(ローカルで)devモードでPostgresqlを実行することをお勧めします。 – seph

答えて

0

回答が見つかりましたhere。 ON句が必要であることを知り、それを指定するのにWHERE句を使用しないでください。代わりにON句を使用してください。