【问题标题】:class method from instance in Model模型中实例的类方法
【发布时间】:2015-10-29 21:01:46
【问题描述】:

我的项目中有一个 cron 作业,该作业执行一个模型。

class Example < ActiveRecord::Base
     def self.test
         number = getNumber(1)
     end

     def getNumber(i)
         value = 2 + i
         return value
     end
end

如何访问函数 getNumber ?

【问题讨论】:

  • 您是否尝试在您的self.test 方法中调用getNumber(1) 之前添加self 关键字?例如number = self.getNumber(1)
  • 然后尝试用Example.test调用它
  • getNumber 看起来是无状态的。为什么不是类方法?
  • 是的,当我尝试在通话前添加自我时出现此错误。 undefined method getnumber' 示例`
  • @SergioTulentsev class Test def getnumber return 2 end end 我调用 Test.getnumber 不起作用

标签: ruby-on-rails cron-task


【解决方案1】:

您的 getNumber 方法(应该是 get_number)是一个实例方法,因此您需要调用 Example.new.get_number(1) 但是正如其他人所提到的,它是无状态的,因此也可以是一个类方法,所以这会起作用:

class Example < ActiveRecord::Base
  def self.test
    number = get_number(1)
  end

  def self.get_number(i)
    value = 2 + i
    return value
  end
end

【讨论】:

  • 或者只是def self.get_number(i); 2 + i; end :)
【解决方案2】:

self.test 中,您在类中(不在实例中)。当你调用getNumber 时,Ruby 会寻找一个类方法。你上面有一个实例方法。如果您将代码从 def getNumber(i) 更改为 def self.getNumber(i),它会按照您的意愿行事。

class Example < ActiveRecord::Base
  def self.test
    number = getNumber(1)
  end

  def self.getNumber(i)
    value = 2 + i
    return value
  end
end

puts Example.test

运行时会输出3

【讨论】:

    猜你喜欢
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多