Теория/Обоснование ActiveRecord::Base

новичок в Rails здесь.

Не могли бы вы помочь мне понять теорию, лежащую в основе очень сомнительной верхней части большинства примеров кода, которые я вижу? Части «ActiveRecord::Base», «Контроллер приложений» и «ActionController::Base»?

  1. Как бы вы назвали этих троих? Это все объекты? Классы?

  2. Я понимаю, что «класс X ‹ ActiveRecord::Base» предназначен для создания объекта в модели и этот «класс ApplicationController ‹ ActionController::Base» для создания объекта в контроллере... так что есть что-то подобное для создания объекта в представлении, просто чтобы округлить все три компонента MVC?


person owlstone    schedule 08.01.2013    source источник


Ответы (3)


ActiveRecord::Base, ApplicationController и ActionController::Base — это все классы. Вам нужно будет создать экземпляр одного из них, чтобы получить объект, но вы никогда этого не сделаете. Вместо этого вы будете расширять их для создания новых подклассов, а затем создавать их экземпляры.

Я считаю, что есть базовый класс для представлений, но вы никогда не должны видеть его при обычном использовании. Обычно вы будете создавать шаблоны представлений, а не классы представлений, поэтому вы не будете иметь дело с классами Ruby в этом разделе фреймворка.

person Community    schedule 08.01.2013

Добавлю к уже сказанному, так как все верно.

Я понимаю, что «класс X ‹ ActiveRecord::Base» предназначен для создания объекта в модели и этот «класс ApplicationController ‹ ActionController::Base» для создания объекта в контроллере... так что есть что-то подобное для создания объекта в представлении, просто чтобы округлить все три компонента MVC?

Это правильный путь, но есть некоторые семантические различия.

class User < ActiveRecord::Base просто создает подкласс ActiveRecord::Base. Пока вы не сделаете что-то вроде User.create(), вы получите экземпляр этого класса, который иногда можно назвать объектом.

Подкласс — это специальное слово для класса, у которого есть родитель. Как вы, возможно, помните, в ruby ​​классы — это, как ни странно, все подклассы класса Object.

Кроме того, создание подкласса ActiveRecord::Base не следует рассматривать как создание объекта в модели. Вместо этого рассмотрите свой подкласс как описание модели (обычно это некоторые данные, которые вы хотите сохранить). Каждый подкласс сам по себе является моделью. Это все семантика, но она может помочь вашему пониманию.

То же самое и с контроллером. Вы не создаете объект в контроллере, вместо этого вы создаете совершенно новое описание контроллера. Это описание на самом деле не является конкретным, пока оно не будет создано, что с rails происходит автоматически, когда вы или пользователь запрашиваете страницу из приложения.

Наконец, действительно существует класс ActionView::Base, завершающий трио. Rails создает его автоматически при вызове render в вашем контроллере.

person iterion    schedule 08.01.2013
comment
Семантика определенно помогает укрепить концепции, которые я пытался изучить. И ты ничего не знаешь, пока не объяснишь это своей бабушке... Итак: 'class User ‹ ActiveRecord::Base' & 'User.create()'... (1) 'User' - это подкласс класса ActiveRecord::Base и описание модели (2) User.create() создает экземпляр пользователя подкласса - person owlstone; 08.01.2013
comment
Именно так, и смысл всего этого подкласса в том, что он дает вам определенные функции и инструменты. Создание подкласса ActiveRecord::Base дает вам все функции, которые вы используете в своей модели. Такие вещи, как средства поиска (User.find(id), User.where(condition: 'value')), валидации (validates_presence_of :cheese) и т. д., — все они исходят из этого наследования. - person iterion; 08.01.2013

ActiveRecord::Base, ActionController::Base — это классы на основе MVC. Однако вы можете создать модель или контроллер без расширения этих классов, тогда они не будут иметь функций, предоставляемых классами.

однако в представлении обычно нет никого, кто мог бы создать объект или модель в представлении. Это может повысить удобочитаемость и ремонтопригодность вашего кода. Он покажет более чистый код. Кроме того, в конкретном представлении, таком как index.rb , он фактически связан с контроллером, с помощью которого вы можете получить экземпляр объекта, который вы инициализируете в контроллере, и использовать его для отображения ваших данных в представлении.

person Nich    schedule 08.01.2013