如何用ruby从self方法调用另一个方法?

时间:2016-12-07 09:31:52

标签: ruby-on-rails ruby activerecord

# app/models/product.rb
class Product < ApplicationRecord
  def self.method1(param1)
    # Here I want to call method2 with a parameter
    method2(param2)
  end

  def method2(param2)
    # Do something
  end
end

我从控制器调用method1。当我运行程序时。我收到了一个错误:

method_missing(at line method2(param2))
.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0/lib/active_record/relation/batches.rb:59:in `block (2 levels) in find_each
...

3 个答案:

答案 0 :(得分:7)

class Product < ApplicationRecord
  def self.method1(param1)
    # Here I want to call method2 with a parameter
    method2(param2)
  end

  def self.method2(param2)
    # Do something
  end
end

说明:第一个是类方法,后者是实例方法。类方法不需要接收器(调用它们的对象),实例方法需要它。所以,你不能从类方法中调用实例方法,因为你不知道你是否有一个接收者(一个实例化的对象叫它)。

答案 1 :(得分:2)

它不起作用,因为没有为method2对象定义Product

method2是一个实例方法,只能在Product类的实例上调用。

答案 2 :(得分:0)

当然@Ursus和@Andrey Deineko的答案正确解决了这个问题。除此之外,如果有人想知道我们如何在instance中为那些class method(though this is not actually class method in ruby)调用self.new.instance_method方法。