1

Rails 的初学者在这里。

你能帮我理解一下我看到的大多数代码示例的最顶端部分背后的理论吗?“ActiveRecord::Base”、“Application Controller”和“ActionController::Base”部分?

  1. 你怎么称呼这三个?它们都是对象吗?上课?

  2. 我知道'class X < ActiveRecord::Base' 是在模型中创建一个对象,而'class ApplicationController < ActionController::Base' 是在控制器中创建一个对象......所以有没有类似的东西来创建一个对象在视图中,只是为了对 MVC 的所有三个组件进行四舍五入?

4

3 回答 3

1

补充已经说过的话,因为它都是准确的。

我知道'class X < ActiveRecord::Base' 是在模型中创建一个对象,而'class ApplicationController < ActionController::Base' 是在控制器中创建一个对象......所以有没有类似的东西来创建一个对象在视图中,只是为了对 MVC 的所有三个组件进行四舍五入?

这是正确的道路,但存在一些语义差异。

class User < ActiveRecord::Base仅创建 ActiveRecord::Base 的子类。在您执行类似的操作之前,您User.create()是否获得了该类的实例,它有时可能被称为对象。

子类是具有父类的特殊词。在 ruby​​ 中,您可能还记得类是 Object 类的所有子类,这非常令人困惑。

此外,不应将 ActiveRecord::Base 子类化为在模型中创建对象。相反,将您的子类视为对模型的描述(通常是您希望存储的一些数据)。 每个子类本身就是一个模型。这都是语义,但它可能有助于您的理解。

控制器也是如此。您不是在控制器中创建对象,而是在创建控制器的全新描述。在实例化之前,该描述并不是真正具体的,当您或用户从应用程序请求页面时,rails 会自动发生这种情况。

最后,确实有一个类来完善这三者,称为 ActionView::Base。renderRails 通过调用你的控制器自动创建它。

于 2013-01-08T02:58:46.583 回答
1

ActiveRecord::Base,ApplicationController并且ActionController::Base都是类。您需要创建一个实例来获取对象,但您永远不会这样做。相反,您将扩展它们以创建新的子类,然后创建这些子类的实例。

我相信视图有一个基类,但在正常使用下你永远不应该看到它。通常,您将创建视图模板而不是视图,因此您不会在框架的那个部分处理 Ruby 类。

于 2013-01-08T00:58:47.023 回答
0

ActiveRecord::Base ,ActionController::Base 是基于 MVC 的类。但是,您可以在不扩展这些类的情况下创建模型或控制器,那么它们将不具有这些类提供的功能。

但是,在视图中,通常没有人在视图中创建对象或模型。这可以确保增加代码的可读性和可维护性。它将显示更干净的代码。此外,在 index.rb 这样的特定视图中,它实际上与控制器相连,您可以通过控制器获取您在控制器中初始化的对象实例,并使用它在视图中显示您的数据。

于 2013-01-08T01:04:44.180 回答