为啥模块 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:没有适当的默认构造函数可用 - 为啥在构造函数中初始化属性?

为啥所有的 Rails 助手总是对所有视图可用?有没有办法禁用它?

Laravel 表单验证,为啥我的视图中没有可用的 $errors 变量?