ruby-on-rails Rails模型中方法返回值的不同值

sxpgvts3  于 2023-01-22  发布在  Ruby
关注(0)|答案(1)|浏览(136)

假设我有一个Employee模型,Employee模型中有一个名为def fixed的方法

def fixed
    return self.cached_fixed.to_f if self.cached_fixed.present?

    return (self.current_salary && self.current_salary.fixed).to_f
  end
end
def current_salary
    return @current_salary if @current_salary
    # @current_salary = self.employee_salaries.detect{|es| es.end_date == nil}
    @current_salary = self.db_current_salary
    return @current_salary
end

如果固定值是employee表中的一列,我们可以使用www.example.com(:fixed)提取不同的值Employee.distinct.select(:fixed) to pull the distinct values
如果它只是一个方法,而不是表中的字段,那么有没有办法不加载所有员工。
我希望从表中获取列的唯一值,但它可能不是上表中的列

qvtsj1bj

qvtsj1bj1#

对于任意方法都不是这样,但是您从EmployeeSalary端开始查询,并使用select在一个查询中只获取您关心的列:

EmployeeSalary
  .select(:fixed) 
  .join(:employee)
  .where(end_date: nil)

这将运行一个select fixed from...查询并返回EmployeeSalary对象列表,但所有未在select调用中列出的字段都将为nil。假设约束条件是只有一个工资记录具有end_date: nil,则每个雇员将有一个EmployeeSalary对象。如果需要唯一值,可以在方法链中添加.distinct
我不确定缓存逻辑如何解决这个问题,如果愿意,您可以在该列表的顶部应用缓存逻辑,但是像这样执行一个查询是相当快的。

相关问题