对于此场景,什么是更好的ActiveRecord查询

时间:2012-01-19 23:59:13

标签: sql ruby-on-rails ruby activerecord

我得到了我的结果,但我觉得里面都很脏。

如何才能更好地获得最接近或等于给定日期的pay_rate或home_base_assignment start_date?

class Employee < ActiveRecord::Base
  has_many :home_base_assignments
  has_many :position_assignments
  has_many :pay_rates, :through => :position_assignments

  def closest_prior_assignment_start(date)
    closest_prior_pay_rate_start = 
      pay_rates.where("pay_rates.start_date <= ?", date)
    .order(:start_date).last.start_date

    closest_prior_home_base_start =
      home_base_assignments.where("start_date <= ?", date)
        .order(:start_date).last.start_date

    [closest_prior_pay_rate_start, closest_prior_home_base_start].sort!.last
  end
end

呸!

1 个答案:

答案 0 :(得分:0)

你可以使用范围重构你的方法,这是我认为你添加到模型中的东西:

scope :lastest, order("start_date DESC")

closest_prior_pay_rate_start = 
  pay_rates.where("pay_rates.start_date <= ?", date).latest

closest_prior_home_base_start =
  home_base_assignments.where("start_date <= ?", date).latest