# 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
...
答案 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
方法。