ruby-on-rails - 从 Active Record 范围内访问类方法?

标签 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

如有任何帮助,我们将不胜感激!

最佳答案

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

def self.distinct_mechanics_sql

def Mechanics.distinct_mechanics_sql

class << self 
  def distinct_mechanics_sql
    ...
  end
end

关于ruby-on-rails - 从 Active Record 范围内访问类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27259171/

相关文章:

ruby-on-rails - 测试 Controller 是否呈现 JS 模板

ruby-on-rails-4 - #<Property::ActiveRecord_Relation 的未定义方法 `id'

ruby-on-rails - Ruby 中的正则表达式不起作用

ruby-on-rails - 如何从 JSON 响应中提取召唤师名称?

ruby-on-rails - form_for 详细信息未显示在 View :Ruby on Rails 中

ruby - 为什么 hash.keys.class 返回数组?

ruby-on-rails - 如何通过 Ruby Gem 共享 activerecord 模型

ruby-on-rails - 如何在 Rails 应用程序中使用 Capybara 测试多选选择框?

ruby - Websocket 连接关闭而不在 Shotgun 服务器上打开

ruby-on-rails - Rails 4 - 如何路由删除路径