初学者在Rails这里。
请问我能否帮助我了解一下我看到的大多数代码示例中非常尖锐的顶部背后的理论? 'ActiveRecord :: Base','Application Controller',& 'ActionController :: Base'部分?
你会怎么称呼这三个?它们都是对象吗?类?
我理解'等级X< ActiveRecord :: Base'是在Model中创建一个对象,& 'class ApplicationController< ActionController :: Base'在Controller中创建一个对象...所以在View中创建一个对象有类似的东西,只是为了在MVC的所有三个组件上完成它吗?
答案 0 :(得分:1)
ActiveRecord::Base
,ApplicationController
和ActionController::Base
都是类。你需要创建一个实例来获取一个对象,但你永远不会这样做。相反,您将扩展它们以创建新的子类,然后创建这些子类的实例。
我相信视图有一个基类,但你不应该在正常使用情况下看到它。通常,您将创建视图模板而不是查看类,因此您不会在框架的该部分中处理Ruby类。
答案 1 :(得分:1)
添加到已经说过的内容,因为它都是准确的。
我理解'等级X< ActiveRecord :: Base'是在Model中创建一个对象,& 'class ApplicationController< ActionController :: Base'在Controller中创建一个对象...所以是否有类似的东西在View中创建一个对象,只是为了在MVC的所有三个组件上四舍五入?
这是正确的道路,但存在一些语义差异。
class User < ActiveRecord::Base
仅创建ActiveRecord :: Base的子类。在你做User.create()
这样的事情之前,你会得到一个该类的实例,有时可能会被称为对象。
子类是具有父级的类的特殊单词。在ruby中,你可能还记得类很容易引起Object类的所有子类。
此外,不应将子类化ActiveRecord :: Base视为在模型中创建对象。相反,请将您的子类视为模型的描述(通常是您希望存储的一些数据)。 每个子类都是模型本身。这是所有语义,但它可能有助于您的理解。
控制器也一样。您不是在控制器中创建对象,而是创建控制器的全新描述。在实例化之前,该描述并不具体,当您或用户从应用程序请求页面时,会自动执行rails。
最后,确实有一个类来完善名为ActionView :: Base的三重奏。 Rails通过调用控制器中的render
自动创建它。
答案 2 :(得分:0)
ActiveRecord :: Base,ActionController :: Base是基于MVC的类。但是,您可以在不扩展这些类的情况下创建模型或控制器,然后它们将不具有类提供的功能。
但是,在视图中,通常没有人在视图中创建对象或模型。这可以确保提高代码的可读性和可维护性。它将显示更干净的代码。此外,在特定的视图中,如index.rb,它实际上与控制器连接,您可以获取在控制器中初始化的对象实例,并使用它在视图中显示您的数据。