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

new*_*ere 4 ruby activerecord ruby-on-rails ruby-on-rails-4

我对该模型中的范围有疑问,并且不知道如何最好地解决它。我想distinct_mechanics_sql在范围内调用 from 以使事情更清晰,但是当我运行它时,我收到“未定义的局部变量或方法”错误。这是模型:

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
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Rus*_*nov 5

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

def self.distinct_mechanics_sql
Run Code Online (Sandbox Code Playgroud)

或者

def Mechanics.distinct_mechanics_sql
Run Code Online (Sandbox Code Playgroud)

或者

class << self 
  def distinct_mechanics_sql
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)