15

Otrzymuję następujący błąd po dodaniu więcej relacji do mojego projektu. Na localhost strona wyświetla się doskonale. Jednak pojawia się błąd podczas próby wyświetlenia go na heroku.Błąd PG dla SELECT DISTINCT, ORDER BY wyrażenia muszą pojawić się na liście wyboru podczas próby wyświetlenia na Heroku

ActiveRecord::StatementInvalid (PG::Error: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list 

Oto mój kontroler traveldeal:

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 kłody

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()):

Ten kod był w orking, dzięki czemu wyświetlałem tylko 3 przypadkowe zdarzenia, które pasowały do ​​lokalizacji (poprzez działanie "act-as-taggable-on") z traveldealsem.

Jednak po dodaniu związku (związanego z zdarzeniami, ale nie traveldeals), zacząłem otrzymywać błąd pg.

Oto relacje, które zostały dodane:

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 

Wszelkie porady, w jaki sposób Mogę stil Otrzymuję losową tablicę 3 eventdeals?

Dzięki.

Odpowiedz

0

Problem polegający na tym, że pozycje ORDER BY powinny odnosić się do kolumn wyjściowych. Sprawdź wynikowy sql, który się nie powiedzie: sytuacja powinna być bardziej zrozumiała.

+1

Nie jestem pewien, czy podążam za tobą. Zaktualizowałem swój wpis o szczegóły w dzienniku Heroku. – Huy

+3

Id również bardziej jasne odpowiedzi, mam ten sam problem. Chcę tylko losować kolejność mojego zapytania. – rugbert

2

miałem ten problem i rozwiązać go uruchamiając order na końcu mojego łańcuchowym.