假设我有一个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
如果它只是一个方法,而不是表中的字段,那么有没有办法不加载所有员工。
我希望从表中获取列的唯一值,但它可能不是上表中的列
1条答案
按热度按时间qvtsj1bj1#
对于任意方法都不是这样,但是您从
EmployeeSalary
端开始查询,并使用select在一个查询中只获取您关心的列:这将运行一个
select fixed from...
查询并返回EmployeeSalary对象列表,但所有未在select
调用中列出的字段都将为nil。假设约束条件是只有一个工资记录具有end_date: nil
,则每个雇员将有一个EmployeeSalary对象。如果需要唯一值,可以在方法链中添加.distinct
。我不确定缓存逻辑如何解决这个问题,如果愿意,您可以在该列表的顶部应用缓存逻辑,但是像这样执行一个查询是相当快的。