从类方法访问实例方法

斗篷耶稣会

我有一个Rails 4应用,该应用具有警报模型和与每个警报相关的测试。

创建新警报时,我有一个after_create过滤器,该过滤器使用实例方法创建新测试:

class Alert < ActiveRecord::Base
    has_many :tests
    after_create :create_test

    private

    def create_test

    #bunch of code using external api to get some data  


     Test.create 

    end
end

我还有一个cron作业,我想使用它为每个警报创建一个新测试。我的计划是要使用一个类方法来做到这一点:

def self.scheduled_test_creation
        @alerts = Alert.all
        @alerts.each do |a|
          a.create_test        
        end
    end

那是行不通的,因为实例方法是私有的。我知道我可以使用例如send来解决这个问题。或者,我可以将这些方法公开。或者,我可以在实例方法中重写那堆api代码。

我只是不确定最好的方法是什么。我不想编写相同的代码两次,并且我想确保这是一种良好的做法。也许在这种情况下,方法不必是私有的-我知道public / private / protected之间的区别,但是我并不真正了解何时应该私有/保护方法。

任何帮助将不胜感激

费卢伊

我喜欢用于多个模型之间交互的服务类。回调会使逻辑很难遵循。

例如:

class AlertCreator
  def initialize(alert)
    @alert = alert
  end

  def call
    if @alert.save
      alert_test = TestBuilder.new(@alert).call
      alert_test.save
      true
    end
  end
end

class TestBuilder
  def initialize(alert)
    @alert = alert
  end

  def call
    # external API interaction stuff
    # return unsaved test
  end
end

在控制器内部,您可以调用AlertCreator.new(@alert).call而不是通常的@alert.save

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从类方法proc访问实例方法

来自分类Dev

在实例方法中访问类方法可变

来自分类Dev

从实例方法中访问ActiveSupport :: Concern类方法

来自分类Dev

是否可以通过类方法访问实例方法和变量

来自分类Dev

如何使用关注访问实例方法中的类方法(或变量)?

来自分类Dev

为什么我不能访问我的类实例方法?

来自分类Dev

Ruby-从匿名类访问实例方法/变量

来自分类Dev

在Java类中访问实例变量的最佳方法是什么?

来自分类Dev

静态方法无法访问类的实例成员

来自分类Dev

在类方法中访问实例变量s3

来自分类Dev

类的实例方法与模块方法

来自分类Dev

Swift ....类方法与实例方法

来自分类Dev

我该如何实例化需要访问其“实例化器”方法的类?

来自分类Dev

调用特定类实例中的方法的HTML按钮无法访问实例值

来自分类Dev

类访问方法

来自分类Dev

访问扩展类方法

来自分类Dev

访问 PHP 类方法

来自分类Dev

使用另一个类实例访问一个类方法?

来自分类Dev

在派生类内部访问基类的实例变量的更好方法是什么?

来自分类Dev

访问从其实例化另一个类的类的方法

来自分类Dev

在不实例化或扩展类A的情况下访问类A内部的方法?

来自分类Dev

尝试访问我在其上调用类方法的类的实例变量

来自分类Dev

在JavaScript类中调用父方法,但stll可以访问对象实例内部的原型方法吗?

来自分类Dev

如何从python中的子类静态方法访问父类实例方法?

来自分类Dev

方法是类方法还是实例方法

来自分类Dev

方法是类方法还是实例方法

来自分类Dev

延迟加载类实例方法

来自分类Dev

Ruby类与实例方法的混淆

来自分类Dev

AngularJS $ resource类与实例方法

Related 相关文章

热门标签

归档