Я пытаюсь понять синтаксис и значение терминов в курсе Ruby On Rails Codecademy. Похоже, что существует класс «Сообщение», который является классом по умолчанию (тот, который я не определил).
(EDIT: оказывается, что 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





он находится в папке ваших моделей, это не базовый класс. Эти методы, эти классы, файлы и т. д., вероятно, были созданы с помощью команды scaffold. Если вы вообще не использовали эту команду, попробуйте создать новый проект и введите свой терминал rails g scaffold Message content:string и проверьте логи, чтобы понять, что происходит. Если вам интересно, есть дополнительная информация на scaffoldздесь
Кроме того, ActiveRecord является ORM по умолчанию для Rails (поэтому ваши модели будут наследовать от него). Вы можете проверить больше информации об этом на это руководство.
Класс Message «наследуется» от ActiveRecord и «определяется» в app/models/message.rb и генерируется либо с помощью операции создания лесов, как сказал Лукас, либо вы можете написать их вручную. Использование функции создания шаблонов имеет свои преимущества, особенно при работе с простыми функциями CRUD — она создает модель, миграцию, файлы спецификаций/тестов, а затем контроллеры и представления. Вы можете настроить их дальше по своему вкусу.
Вот руководство по типичной структуре каталогов приложений Rails: https://www.sitepoint.com/a-quick-study-of-the-rails-directory-structure/
Если вы спрашиваете, где «хранятся» сообщения, они хранятся/сохраняются везде, где ActiveRecord настроен на сохранение данных.
ActiveRecord — это класс, отвечающий за сохранение (хранение) и извлечение ваших данных по мере их моделирования с использованием файлов модели, таких как message.rb, расположенных в каталоге app/models.
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/.
Спасибо, и вы были абсолютно правы. Как вы и сказали, я сгенерировал эшафотное сообщение.