为啥模块 ClassMethod 在这里没有可用的类方法 [关闭]
Posted
技术标签:
【中文标题】为啥模块 ClassMethod 在这里没有可用的类方法 [关闭]【英文标题】:Why aren't class methods available here with module ClassMethod [closed]为什么模块 ClassMethod 在这里没有可用的类方法 [关闭] 【发布时间】:2021-07-02 18:57:03 【问题描述】:红宝石 2.6.3 ;导轨 6.0.3
我有一个模块和一个包含它的类,但我不能在该类上提供任何类方法,只有实例方法
module Importable
def self.inlcuded(base)
base.extend ClassMethods
base.class_eval do
scope :from_source_a, -> where(import_source: "source_a")
end
end
def from_source_a?
self.import_source == "source_a"
end
module ClassMethods
def find_from_source_a(id)
self.find_by(
import_source: "source_a",
import_id: id
)
end
end
end
class Employee < ApplicationRecord
include Importable
end
所以
Employee.first.from_source_a?
有效
但
Employee.find_from_source_a(id)
抛出 NoMethodError: undefined method find_from_source_a for Employee
但是我正在查看的示例使它看起来应该可以工作。关于我在这里出错的任何想法?
【问题讨论】:
如果你使用 Rails,为什么不使用ActiveSupport::Concern
【参考方案1】:
看来你打错了。
self.included(base)
不是self.inlcuded(base)
【讨论】:
以上是关于为啥模块 ClassMethod 在这里没有可用的类方法 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用@classmethod 而不是普通的实例方法[重复]
为啥元类适用于类属性但@classmethod @property 不适用?
错误 C2512:没有适当的默认构造函数可用 - 为啥在构造函数中初始化属性?