1
이 루비를 레일스 쿼리에 포스트 쓰 데이터베이스로 쓰는 방법을 알고 싶습니다. 그것은 MySQL을 통해 작동하지만, 포스트 그레스에 오류 반환 :MySQL에서는 작동하지만 Postgres SQL에서는 작동하지 않습니다
루비 레일 쿼리
response_array = Vote.
by_leaderboard_date_range.
joins(:user).
joins(:event_poll_relationship).
select('users.*, sum(points_earned) as total').
group('user_id').
order('total DESC').
limit(20)
ERROR
2013-07-31T13:02:43.430333+00:00 app[web.3]: ActiveRecord::StatementInvalid (PG::Error: ERROR: argument of JOIN/ON must be type boolean, not type integer
2013-07-31T13:02:43.430333+00:00 app[web.3]: LINE 1: ...ers"."id" = "votes"."user_id" LEFT JOIN events on events.esp...
2013-07-31T13:02:43.430333+00:00 app[web.3]: ^
2013-07-31T13:02:43.430333+00:00 app[web.3]: : SELECT users.*, sum(points_earned) as total FROM "votes" INNER JOIN "event_poll_relationships" ON "event_poll_relationships"."id" = "votes"."event_poll_relationship_id" INNER JOIN "users" ON "users"."id" = "votes"."user_id" LEFT JOIN events on events.espn_event_id WHERE (events.espn_event_id = event_poll_relationships.espn_event_id AND events.start_date_time >= '2013-07-28 00:00:00' AND events.start_date_time <= '2013-12-31 00:00:00') GROUP BY user_id ORDER BY total DESC LIMIT 20):
투표의 모델
class Vote < ActiveRecord::Base
scope :by_espn_event_id, lambda {|espn_event_id| joins(:event_poll_relationship).joins('LEFT JOIN events on events.espn_event_id').where('event_poll_relationships.espn_event_id = ? AND events.espn_event_id = event_poll_relationships.espn_event_id', espn_event_id) }
scope :by_leaderboard_date_range, joins(:event_poll_relationship).joins('LEFT JOIN events on events.espn_event_id').where('events.espn_event_id = event_poll_relationships.espn_event_id AND events.start_date_time >= ? AND events.start_date_time <= ?',LeaderBoardRange.find(1).start_date.to_datetime,LeaderBoardRange.find(1).end_date.to_datetime)
을 691,363,210
RAW는 SQL
SELECT users.*, sum(points_earned) as total FROM "votes" INNER JOIN "event_poll_relationships" ON "event_poll_relationships"."id" = "votes"."event_poll_relationship_id" INNER JOIN "users" ON "users"."id" = "votes"."user_id" LEFT JOIN events on events.espn_event_id WHERE (events.espn_event_id = event_poll_relationships.espn_event_id AND events.start_date_time >= '2013-07-28 00:00:00' AND events.start_date_time <= '2013-12-31 00:00:00') GROUP BY user_id ORDER BY total DESC LIMIT 20)
감사
감사 :이 두 DBS에서 작동합니다. 앞으로 Rails와 PostgreSQL 버전을 포함 시키십시오. 그래도 제대로 생성 된 SQL을 포함하기위한 소품. –