Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从活动记录范围内访问类方法?_Ruby On Rails_Ruby_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails 从活动记录范围内访问类方法?

Ruby on rails 从活动记录范围内访问类方法?,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,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") } de

我对这个模型中的范围有问题,我不知道如何最好地解决它。我想在范围内调用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

任何帮助都将不胜感激

作用域与类方法相同,因此在该作用域内您将隐式调用另一个类方法。而您独特的_mechanics_sql是一个实例方法,在作用域内使用它,并将其声明为:

def self.distinct_mechanics_sql


谢谢,效果很好!因为我只是在范围调用中插入一个字符串,有更好的方法吗?也许可以将其存储为类常量?对于这样的东西,您有什么建议?我不建议您使用作用域以及纯sql。你应该在ORM上尽最大努力。现在,我建议您将所有这些内容移到一个类方法中。然后,如果您无法将代码从纯SQL更改为AR调用,您可以向社区显示您的关系和工作类方法以进行改进。谢谢。我不知道codereview,我会用它。
def Mechanics.distinct_mechanics_sql
class << self 
  def distinct_mechanics_sql
    ...
  end
end