我正在观看 Code School Rails 测试类(class)。有一个 zombie 类的实例。 zombie 模型有一个方法:

def avatar_url
  ...
end

在测试中,.rb 文件具有以下内容:
z.avatar_url
  • 当我调用这样的方法时,Rails 如何区分我调用的是 Controller 方法还是模型方法?我没想过从 Controller 以外的地方调用模型方法,只喜欢 Model.method 而不是 object.method
  • 如果我的 Controller 和我的模型都有一个同名的方法,Rails 怎么知道要调用哪个方法?

  • 更新:

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

    所以我可以说:
    s = String.new
    s.capitalize
    

    如果这个调用没有转到模型而不是 Controller ,那么它会去哪里?在 Rails 目录中,像 String 这样的类应该在哪里定义?

    最佳答案

    Controller 内部的方法只能通过 URL 调用。
    例子:

    /things/super_action
    

    应该在 def super_action 中调用 ThingsController

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

    这是一个类方法调用,它可能被定义为 def self.ultra_method
    m = Model.new
    m.instance_method
    

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

    更新
    Stringcore 语言的 ruby 类。 ArrayNumber 等也是如此。在您的示例中,您正在创建 instanceString 并调用 instance method 类的 String

    关于ruby-on-rails - Rails Controller /模型方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18636116/

    10-12 01:26
    查看更多