В Ruby on Rails, где хранится класс «Сообщение»?

Я пытаюсь понять синтаксис и значение терминов в курсе 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
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
210
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

он находится в папке ваших моделей, это не базовый класс. Эти методы, эти классы, файлы и т. д., вероятно, были созданы с помощью команды scaffold. Если вы вообще не использовали эту команду, попробуйте создать новый проект и введите свой терминал rails g scaffold Message content:string и проверьте логи, чтобы понять, что происходит. Если вам интересно, есть дополнительная информация на scaffoldздесь

Кроме того, ActiveRecord является ORM по умолчанию для Rails (поэтому ваши модели будут наследовать от него). Вы можете проверить больше информации об этом на это руководство.

Спасибо, и вы были абсолютно правы. Как вы и сказали, я сгенерировал эшафотное сообщение.

JimmyTheCode 16.07.2019 19:25
Ответ принят как подходящий

Класс 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/.

Другие вопросы по теме