Ошибка PG для SELECT DISTINCT, ORDER BY выражения должны появляться в списке выбора при попытке просмотра на Heroku
Я получаю эту ошибку после того, как добавил к моему проекту дополнительные отношения. На локальном хосте страница отображается отлично. Тем не менее, я получаю сообщение об ошибке при попытке просмотреть его на герою.
ActiveRecord::StatementInvalid (PG::Error: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
Вот мой контроллер путешествия:
def show
@traveldeal = @commentable = Traveldeal.find(params[:id])
@comments = Comment.all
@title = @traveldeal.title
@eventdeals = Eventdeal.tagged_with(@traveldeal.location_tag_list, :any => true, :order => 'RANDOM()', :limit => 3)
end
traveldeal/show.html
<% unless @eventdeals.blank? %>
<h1>Events in the area:</h1>
<% @eventdeals.each do |eventdeal| %>
<%= link_to eventdeal do %>
<!-- content -->
<% end %>
<% end %>
<% end %>
Журналы Heroku
SELECT DISTINCT eventdeals.* FROM "eventdeals" JOIN taggings event_taggings_e9f0e2e ON event_taggings_e9f0e2e.taggable_id = eventdeals.id AND event_taggings_e9f0e2e.taggable_type = 'Eventdeal' WHERE (event_taggings_e9f0e2e.tag_id = 1 OR event_taggings_e9f0e2e.tag_id = 3 OR event_taggings_e9f0e2e.tag_id = 4 OR event_taggings_e9f0e2e.tag_id = 5) ORDER BY RANDOM()):
Этот код работал так, что я отображал только 3 случайных события, которые соответствовали местоположению (через act-as-taggable-on) с путешествием.
Однако, после того, как я добавил отношения (связанные с событиями, но не путешествующими), я начал получать ошибку pg.
Вот те отношения, которые были добавлены:
trip.rb
class Trip < ActiveRecord::Base
has_many :eventdealtrips, :dependent => :destroy
has_many :eventdeals, :through => :eventdealtrips
end
eventdeal.rb
class Eventdeal < ActiveRecord::Base
has_many :eventdealtrips
has_many :trips, :through => :eventdealtrips, :dependent => :destroy
end
eventdealtrip.rb
class Eventdealtrip < ActiveRecord::Base
belongs_to :eventdeal
belongs_to :trip
end
Любые советы о том, как я могу получить случайный массив из 3 событий?
Спасибо.
Ответы
Ответ 1
Ваш запрос не соответствует стандартам для Rails 3, и я не хочу давать вам плохо сконструированное решение.
Сообщение ниже отвечает на ваш вопрос и придерживается правил Rails 3.
Rails 3, ActiveRecord, PostgreSQL - ".uniq" команда не работает?
Ответ 2
У меня была эта проблема и она была решена, запустив order
в конце моей цепочке.
Ответ 3
Проблема в том, что записи ORDER BY должны ссылаться на выходные столбцы.
Посмотрите на приведенный sql, который не работает: ситуация должна быть более понятной.