Ruby on rails 在RubyonRails中,类“在哪里?”;讯息;存储?

Ruby on rails 在RubyonRails中,类“在哪里?”;讯息;存储?,ruby-on-rails,ruby,class,message,Ruby On Rails,Ruby,Class,Message,我正在努力理解RubyonRails编解码器中术语的语法和含义。似乎有一个类“Message”是默认类(我还没有定义) (编辑:原来Message不是默认类。它是在~/app/models/中定义的,我不知道。它是在我输入命令时创建的: rails生成模型消息。本文的任何读者都可能忽略我问题的其余部分,因为它变得无关紧要。 ) 例如,在消息控制器中定义了以下方法: ~app/controllers/messages_controller def new @message = Message.n

我正在努力理解RubyonRails编解码器中术语的语法和含义。似乎有一个类“Message”是默认类(我还没有定义)

(编辑:原来Message不是默认类。它是在~/app/models/中定义的,我不知道。它是在我输入命令时创建的:
rails生成模型消息
。本文的任何读者都可能忽略我问题的其余部分,因为它变得无关紧要。 )

例如,在消息控制器中定义了以下方法:

~app/controllers/messages_controller
def new 
@message = Message.new 
end
我理解上面指示创建一个新的实例变量:“@message”的类:“message”。在我们这样做之前,我们通常必须事先创建一个类“Message”,但我不记得曾经这样做过,这表明Message是一个默认类

所以我的问题是,类“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

它位于models文件夹中,不是基类。这些方法、这些类、文件等可能是使用
scaffold
命令创建的。如果您根本没有使用此命令,请尝试创建一个新项目,并键入终端
rails g scaffold Message content:string
,然后检查日志,以便了解发生了什么。如果您对此感到好奇,可以在
scaffold

另外,
ActiveRecord
是Rails的默认ORM(这就是为什么您的模型将从中继承)。您可以在上查看更多信息。

消息类“继承”自ActiveRecord,并在app/models/Message.rb中“定义”,由Lucas所说的脚手架操作生成,也可以手动编写。使用脚手架特性有其优点,尤其是在处理简单的CRUD特性时——它创建模型、迁移、规范/测试文件,然后创建控制器和视图。您可以根据自己的喜好进一步定制

以下是关于典型Rails应用程序目录结构的指南:

如果您询问消息“存储”在何处,则只要将ActiveRecord配置为持久化数据,消息就会被存储/持久化

ActiveRecord是一个类,它负责在使用模型文件(如app/models目录中的message.rb)对数据建模时持久化(存储)和检索数据

ActiveRecord可以使用sqlite、mysql/mariadb、postgres数据库以及更多使用“适配器”的数据库。在应用程序中,您可以检查config/database.yml以查看配置了什么和/或更改了存储后端


“定义”类的文件遵循Rails的特定命名和位置约定,因此加载程序知道要查找什么,例如
gems/activerecord-6.0.0.rc1/lib/active\u record.rb
(activerecord)或
app/models/message.rb
(message)。您将始终在app/models/

下保存应用程序模型,谢谢,您完全正确。正如你所说,我已经生成了脚手架消息。
~app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0.rc1/lib/active_record.rb