从Active Record范围内访问类方法?

时间:2014-12-02 21:20:05

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我遇到了这个模型中的范围问题,我对如何最好地修复它感到茫然。我想从范围内调用distinct_mechanics_sql来保持清洁,但是当我运行它时,我得到一个“未定义的局部变量或方法”错误。这是模型:

class Mechanics < ActiveRecord::Base
  scope :with_moz, -> { joins("JOIN (#{distinct_mechanics_sql}) mh ON mh.mechanic_id = mechanics.id") }

  def distinct_mechanics_sql 
    """
    SELECT DISTINCT ON (mechanic_id) *
    FROM checkups
    ORDER BY mechanic_id, updated_at DESC
    """
  end

end

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

范围与类方法相同,因此在范围内您隐式调用另一个类方法。并且您的distinct_mechanics_sql是一个实例方法,要在范围内使用它,请将其声明为:

def self.distinct_mechanics_sql

def Mechanics.distinct_mechanics_sql

class << self 
  def distinct_mechanics_sql
    ...
  end
end