我试图理解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
答案 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 /下。