Составление областей ActiveRecord с помощью выбора - PullRequest
0 голосов
/ 25 апреля 2018

К сожалению, ActiveRecord select заменяет существующее предложение SELECT вместо добавления к нему, поэтому я не могу составлять запросы.У кого-нибудь есть обходной путь?

Пример модели:

class Story
  scope :recent, -> { where("created_at >= ?", 1.month.ago) }

  # deliberately simple examples, please don't get distracted memoizing, etc.
  scope :with_net_score, -> { select("`stories`.*, (upvotes - downvotes) as net_score" }
  scope :with_recent, -> { select("`stories.*, greatest(updated_at, last_vote_at) as recent") }
end

Так что пока я могу сочинять Story.recent.with_net_score, Story.with_net_score.with_recent не получается.И оба with_net_score и with_recent терпят неудачу, когда Story приходит после объединения с ассоциацией.

Как бы вы переписали with_net_score, чтобы он добавлялся к выбранным полям вместоих можно объединить с with_recent и объединяет?

1 Ответ

0 голосов
/ 15 апреля 2019

Добавление авторского решения к этому:

class ApplicationRecord < ActiveRecord::Base
  scope :select_fix, -> { select(self.arel_table.project(Arel.star)) }
end

https://github.com/lobsters/lobsters/blob/master/app/models/application_record.rb

...