在 Rails 上的 Ruby 中,class "Message" 存储在哪里?
In Ruby on Rails, where is the class "Message" stored?
我正在尝试理解 Ruby Rails Codecademy 课程中术语的语法和含义。似乎有一个 class 'Message' 是默认的 class (我还没有定义)。
(编辑:事实证明 Message 不是默认值 class。它是在 ~/app/models/ 中定义的,我不知道。它是在我输入命令时创建的:
rails generate model Message
。这篇文章的任何读者都可能会忽略我剩下的问题,因为它变得无关紧要了。
)
例如,在消息控制器中定义了以下方法:
~app/controllers/messages_controller
def new
@message = Message.new
end
我理解上面的指示创建一个新的实例变量:class的“@message”:"Message"。在我们这样做之前,我们通常必须事先创建一个 class "Message",但我不记得曾经这样做过,这表明 Message 是默认的 class.
所以我的问题是,class "Message" 定义在哪里,这些默认操作 "new"、"all" 等来自哪里?
我在我的 rails 文件中搜索了 "Message" 并找到了以下内容:
~app/node_modules/@rails/activestorage/README.md:
64
65 ```ruby
66: class Message < ApplicationRecord
67 has_many_attached :images
68 end
这表明 class Message 继承自 ApplicationRecord superclass。我进行了搜索,发现有大量名为 "active_record.rb" 的文件。这引发了进一步的问题。 Ruby 如何知道要引用哪个 "active_record.rb" 文件?
"active_record.rb" 个文件之一保存在此处:
~app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0.rc1/lib/active_record.rb
它在您的模型文件夹中,它不是基础 class。这些方法、这些 classes、文件等可能是使用 scaffold
命令创建的。如果您根本没有使用此命令,请尝试创建一个新项目并在您的终端中输入 rails g scaffold Message content:string
并检查日志,以便了解发生了什么。如果你对此感到好奇,scaffold
here
上有更多信息
另外,ActiveRecord
是 Rails 默认的 ORM(这就是为什么你的模型会继承它)。您可以在 this guide.
上查看有关它的更多信息
来自 ActiveRecord 的 class "inherits" 消息 "defined" 在 app/models/message.rb 中,如 Lucas 所说,由脚手架操作生成,或者您可以编写它们手动。使用脚手架功能有其优势,尤其是在处理简单的 CRUD 功能时 - 它创建模型、迁移、spec/test 文件,然后是控制器和视图。您可以根据自己的喜好进一步自定义这些内容。
这是典型的 Rails 应用程序目录结构的指南:https://www.sitepoint.com/a-quick-study-of-the-rails-directory-structure/
如果您问消息在哪里 "stored",它们就在 stored/persisted ActiveRecord 配置为保存数据的任何地方。
ActiveRecord 是 class 负责在您使用模型文件(例如位于 app/models 目录中的 message.rb 建模时持久化(存储)和检索数据。
ActiveRecord 可以使用 sqlite、mysql/mariadb、postgres 数据库以及更多使用 "adapters" 的数据库。在您的应用程序中,您可以检查 config/database.yml 以查看配置的内容 and/or 更改存储后端。
class 所在的文件 "defined" 遵循特定的命名和位置约定 Rails 因此加载程序知道要查找的内容,例如 gems/activerecord-6.0.0.rc1/lib/active_record.rb
(ActiveRecord) 或 app/models/message.rb
(消息)。您将始终将您的应用程序模型保存在 app/models/.
下
我正在尝试理解 Ruby Rails Codecademy 课程中术语的语法和含义。似乎有一个 class 'Message' 是默认的 class (我还没有定义)。
(编辑:事实证明 Message 不是默认值 class。它是在 ~/app/models/ 中定义的,我不知道。它是在我输入命令时创建的:
rails generate model Message
。这篇文章的任何读者都可能会忽略我剩下的问题,因为它变得无关紧要了。
)
例如,在消息控制器中定义了以下方法:
~app/controllers/messages_controller
def new
@message = Message.new
end
我理解上面的指示创建一个新的实例变量:class的“@message”:"Message"。在我们这样做之前,我们通常必须事先创建一个 class "Message",但我不记得曾经这样做过,这表明 Message 是默认的 class.
所以我的问题是,class "Message" 定义在哪里,这些默认操作 "new"、"all" 等来自哪里?
我在我的 rails 文件中搜索了 "Message" 并找到了以下内容:
~app/node_modules/@rails/activestorage/README.md:
64
65 ```ruby
66: class Message < ApplicationRecord
67 has_many_attached :images
68 end
这表明 class Message 继承自 ApplicationRecord superclass。我进行了搜索,发现有大量名为 "active_record.rb" 的文件。这引发了进一步的问题。 Ruby 如何知道要引用哪个 "active_record.rb" 文件?
"active_record.rb" 个文件之一保存在此处:
~app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0.rc1/lib/active_record.rb
它在您的模型文件夹中,它不是基础 class。这些方法、这些 classes、文件等可能是使用 scaffold
命令创建的。如果您根本没有使用此命令,请尝试创建一个新项目并在您的终端中输入 rails g scaffold Message content:string
并检查日志,以便了解发生了什么。如果你对此感到好奇,scaffold
here
另外,ActiveRecord
是 Rails 默认的 ORM(这就是为什么你的模型会继承它)。您可以在 this guide.
来自 ActiveRecord 的 class "inherits" 消息 "defined" 在 app/models/message.rb 中,如 Lucas 所说,由脚手架操作生成,或者您可以编写它们手动。使用脚手架功能有其优势,尤其是在处理简单的 CRUD 功能时 - 它创建模型、迁移、spec/test 文件,然后是控制器和视图。您可以根据自己的喜好进一步自定义这些内容。
这是典型的 Rails 应用程序目录结构的指南:https://www.sitepoint.com/a-quick-study-of-the-rails-directory-structure/
如果您问消息在哪里 "stored",它们就在 stored/persisted ActiveRecord 配置为保存数据的任何地方。
ActiveRecord 是 class 负责在您使用模型文件(例如位于 app/models 目录中的 message.rb 建模时持久化(存储)和检索数据。
ActiveRecord 可以使用 sqlite、mysql/mariadb、postgres 数据库以及更多使用 "adapters" 的数据库。在您的应用程序中,您可以检查 config/database.yml 以查看配置的内容 and/or 更改存储后端。
class 所在的文件 "defined" 遵循特定的命名和位置约定 Rails 因此加载程序知道要查找的内容,例如 gems/activerecord-6.0.0.rc1/lib/active_record.rb
(ActiveRecord) 或 app/models/message.rb
(消息)。您将始终将您的应用程序模型保存在 app/models/.