Как добавить меньше или равно условию (`<=`) в ассоциации активных записей рельсов, чтобы выбрать только определенные данные? - PullRequest
0 голосов
/ 30 января 2019

В общем, мой отчет показывает Мастеров.Но мне нужно отобразить только один мастер для этого алгоритма.

Этот запрос отображает несколько мастеров на выбранную дату для отчета.

  def get_masters_name
    str = ''
    team.masters.each do |m|
      str += "#{m.full_name}"
    end
    return str
  end

И мне нужно отобразить только один мастер в отчете, если его начальная дата будет меньше (но приблизительно равна) или равна дате отчета.

Это примернокак этот запрос будет выглядеть в SQL:

SELECT * FROM * WHERE team.team_id and report_date = (SELECT MAX(master.date_work) FROM master WHERE master.date_work <= report_date)

report.model:

class Report < ActiveRecord::Base
  self.table_name = 'reports'
  belongs_to :team, foreign_key: 'teams_id'

  def get_masters_name
    str = ''
    team.masters.each do |m|
      str += "#{m.full_name}"
    end
    return str
  end
end

1 Ответ

0 голосов
/ 30 января 2019

Вы можете добавить предложение where для фильтрации основных записей на основе отчетов report_date, так как дополнительно вы можете реорганизовать свой код, используя pluck и join

def get_masters_name
  team.masters.where('start_date <= ?', self.report_date)
    .order(start_date: :desc)
    .limit(1).pluck(:full_name).join(',')
end

Здесь start_date должно быть столбцом masters иreport_date - это столбец таблицы reports.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...