18

プロジェクトに関係を追加した後、このフォロー エラーが発生します。localhost では、ページは問題なく表示されます。しかし、heroku で表示しようとするとエラーが発生します。

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

このコードは機能していたので、(act-as-taggable-on を通じて) 場所が traveldeal と一致する 3 つのランダムな eventdeals のみが表示されました。

ただし、関係 (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 つのイベント取引のランダムな配列を取得する方法について何かアドバイスはありますか?

ありがとう。

4

1 に答える 1

2

私はこの問題を抱えていてorder、デイジー チェーンの最後で実行することで解決しました。

于 2014-05-07T16:24:40.963 に答える