15

プロジェクトに関係を追加した後、このフォローエラーが発生します。 localhostでは、ページは完璧に表示されます。しかし、ヒロクで見ようとするとエラーが出ます。ここでSELECT DISTINCTのPGエラー、Herokuで表示しようとするとORDER BY式が選択リストに表示される

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

は私の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のログ

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を介して)traveldealと一致しました。

しかし、私は関係を追加した後(eventdealsに関連していますが、traveldealsではなく)、私は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つのeventdealsのランダムな配列を取得?

ありがとうございました。

答えて

0

出力列にORDER BYエントリを参照する必要があるという問題。 結果のSQLを見てください。それは失敗します。状況はより明確になるはずです。

+1

私があなたに従っているかどうかは不明です。私はherokuログの詳細で投稿を更新しました。 – Huy

+3

私は同じ問題を抱えています。私はちょうど私のクエリの順序をランダム化したい。 – rugbert

2

私はこの問題を持っていたし、私のデイジーチェーンの最後にorderを実行することによってそれを解決しました。

関連する問題