到目前为止,我一直在研究Rails这么长时间......所以如果有空的话可以纠正我
我看到有两种方法可以在rails中定义方法
def method_name(param)
def self.method_name(param)
差异(据我所知)是1主要用于控制器而2则用于模型......但偶尔我会碰到定义为1的模型中的方法。
你能解释一下这两种方法的主要区别吗?
答案 0 :(得分:4)
数字1.这定义了一个instance method
,可以在模型的实例中使用
数字2.这定义了class method
,并且只能由类本身使用
例如:
class Lol
def instance_method
end
def self.class_method
end
end
l = Lol.new
l.instance_method #=> This will work
l.class_method #=> This will give you an error
Lol.class_method #=> This will work
答案 1 :(得分:2)
方法self.method_name定义类的方法。基本上在类定义中,将self视为指定义的类。所以当你说def self.method_name时,你是在类本身上定义方法。
class Foo
def method_name(param)
puts "Instance: #{param}"
end
def self.method_name(param)
puts "Class: #{param}"
end
end
> Foo.new.method_name("bar")
Instance: bar
> Foo.method_name("bar")
Class: bar