rails定义方法的不同方式

时间:2012-08-03 14:30:54

标签: ruby-on-rails ruby

到目前为止,我一直在研究Rails这么长时间......所以如果有空的话可以纠正我

我看到有两种方法可以在rails中定义方法

  1. def method_name(param)
  2. def self.method_name(param)
  3. 差异(据我所知)是1主要用于控制器而2则用于模型......但偶尔我会碰到定义为1的模型中的方法。

    你能解释一下这两种方法的主要区别吗?

2 个答案:

答案 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