Rails & Postgres - действительно ли запросы со столбцами count являются такими сложными? - PullRequest
0 голосов
/ 24 ноября 2010

В моем приложении есть следующие модели (показаны только соответствующие области):

class Audition < ActiveRecord::Base
  def self.with_new_applications
    columns = self.column_names.map{|c| "auditions.#{c}" }.join(', ')

    select(columns).joins(:applications).merge(Application.unreplied).group(columns)
  end
end

class Application < ActiveRecord::Base
  def self.unreplied
    columns = Application.column_names.map{|c| "applications.#{c}" }.join(', ')

    select("#{columns}, count(messages.id) as message_count").
      joins('left outer join messages on messages.application_id = applications.id').
      group(columns).
      having('count(messages.id) = 0')
  end
end

Из-за использования postgreSQL кажется, что запросы были сделаны излишне сложными по сравнению с MySQL из-за необходимости включить все столбцы для столбцов count / группировки.

Я что-то упустил? Мне это не кажется "рельсовым".

Могут ли эти запросы быть выполнены более простым способом?

Спасибо

1 Ответ

2 голосов
/ 24 ноября 2010

Может быть, вы могли бы подойти к проблеме с совершенно другой точки зрения, используя ActiveRecord: counter_cache? например,

belongs_to :application, :counter_cache => true

Возможно, вы могли бы сделать короткий, простой и производительный запрос таким образом.

...