Rails控制器/模型方法

Nik*_*iko 3 ruby ruby-on-rails

我正在观看Code School Rails测试课程.有一个类的实例zombie.该zombie模型有一个方法:

def avatar_url
  ...
end
Run Code Online (Sandbox Code Playgroud)

在测试中,.rb文件具有以下内容:

z.avatar_url
Run Code Online (Sandbox Code Playgroud)
  1. 当我调用这样的方法时,如果我调用控制器或模型方法,Rails如何区分?我没有想过从控制器以外调用模型方法,只是喜欢Model.method和不喜欢object.method.
  2. 如果我的控制器和我的模型都有一个同名的方法,那么Rails如何知道要调用哪一个?

更新:

让我们以String类为例,它不是模型,对吧?

所以我可以说:

s = String.new
s.capitalize
Run Code Online (Sandbox Code Playgroud)

如果此调用没有转到模型而不是控制器,那么它在哪里?在Rails目录中定义类似String的类在哪里?

Mur*_*foX 9

控制器内部的方法只能通过URL调用.
例:

/things/super_action
Run Code Online (Sandbox Code Playgroud)

应该打电话给def super_action里面ThingsController.

至于模型方法,它们可以在任何地方访问.请注意它们是实例还是类方法:

Model.ultra_method
Run Code Online (Sandbox Code Playgroud)

这是一个类方法调用,它可能定义为def self.ultra_method.

m = Model.new
m.instance_method
Run Code Online (Sandbox Code Playgroud)

这是一个实例方法调用,它可能被定义为def ultra_method.

UPDATE

String是一coreruby语言.由于是Array,Number等在你的榜样,你正在创建instanceString,并呼吁的instance method对的String类.