Ruby on rails 从活动记录范围内访问类方法?
我对这个模型中的范围有问题,我不知道如何最好地解决它。我想在范围内调用distinct_mechanics_sql以保持更清晰,但是当我运行它时,我得到一个未定义的局部变量或方法错误。模型如下: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
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