在Ruby on Rails中,“消息”类存储在哪里?

时间:2019-07-16 09:30:19

标签: ruby-on-rails ruby class message

我试图理解Ruby On Rails Codecademy课程中术语的语法和含义。看来有一个“消息”类是默认类(我尚未定义)。

(编辑:事实证明Message不是默认类。它是在〜/ app / models /中定义的,并且我不知道。它是在输入命令时创建的: rails generate model Message。任何读者都可以忽略我剩下的问题,因为它变得无关紧要了。 )

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

~app/controllers/messages_controller
def new 
@message = Message.new 
end

我理解上面的内容,以指示创建类:“消息”的新实例变量:“ @ message”。在执行此操作之前,我们通常必须事先创建一个“ Message”类,但是我不记得曾经这样做过,这表明Message是默认类。

所以我的问题是,“消息”类在哪里定义,这些默认操作“新”,“全部”等来自何处?

我已经在Rails文件中搜索“消息”,并且发现了以下内容:

~app/node_modules/@rails/activestorage/README.md:
   64  
   65  ```ruby
   66: class Message < ApplicationRecord
   67    has_many_attached :images
   68  end

这建议Message类从ApplicationRecord超类继承。我已经进行了搜索,并且有许多名为“ 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

2 个答案:

答案 0 :(得分:1)

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

了解更多信息

此外,ActiveRecord是Rails的默认ORM(这就是模型将从其继承的原因)。您可以在this guide上查看有关此信息的更多信息。

答案 1 :(得分:0)

Message类是ActiveRecord的“继承”类,是在app / models / message.rb中“定义”的,可以通过脚手架操作生成,如Lucas所说,也可以手动编写。使用脚手架功能有其优势,尤其是在处理简单的CRUD功能时-它会创建模型,迁移,规格/测试文件,然后创建控制器和视图。您可以根据自己的喜好自定义这些内容。

以下是有关典型Rails应用程序目录结构的指南:https://www.sitepoint.com/a-quick-study-of-the-rails-directory-structure/

如果您询问消息的“存储位置”,则将它们存储/持久化到ActiveRecord配置为持久存储数据的任何位置。

ActiveRecord是用于在使用模型文件(例如位于app / models目录中的message.rb)进行建模时持久化(存储)和检索数据的类。

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

“定义”了类的文件遵循与Rails的某种命名和位置约定,因此加载程序知道要查找的内容,例如gems/activerecord-6.0.0.rc1/lib/active_record.rb(ActiveRecord)或app/models/message.rb(Message) 。您将始终将应用程序模型保存在app / models /下。