0Pricing
Ruby Academy · Урок

Контроллеры и действия

Обрабатывайте запросы

«Контроллеры и действия» — бесплатный урок Ruby Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.

Что такое контроллер

Контроллер получает запрос от маршрутизатора, выполняет необходимую работу и решает, что отправить в ответ. Он координирует взаимодействие моделей и представлений.

  • Контроллеры находятся в app/controllers.
  • Они наследуются от ApplicationController.
  • Каждый открытый метод является действием.

Определение контроллера

Контроллер — это класс, имя которого оканчивается на Controller. По соглашению ArticlesController обрабатывает маршруты ресурса articles.

class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end
end

Действия соответствуют маршрутам

Каждый из семи маршрутов REST вызывает соответствующее действие. Маршрутизатор направляет GET /articles в index, GET /articles/1 — в show и так далее. Если называть действия по соглашению, все связи создаются автоматически.

Хеш params

Данные запроса поступают в params — объект, похожий на хеш, который содержит сегменты маршрута, строки запроса и поля формы. Для /articles/5 значение params[:id] равно "5".

def show
  @article = Article.find(params[:id])
end

Переменные экземпляра в представлениях

Контроллеры передают данные представлениям через переменные экземпляра (с префиксом @). Любая переменная @variable, заданная в действии, доступна в соответствующем шаблоне представления.

def index
  @articles = Article.all
  # @articles is available in index.html.erb
end

Реализация index и show

Действия чтения просты: index загружает коллекцию, а show — одну запись по идентификатору. Затем они отображают свои шаблоны по умолчанию.

class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end

  def show
    @article = Article.find(params[:id])
  end
end

Реализация create

Действие create создаёт запись из отправленных данных и сохраняет её. При успехе оно перенаправляет пользователя, а при ошибке повторно отображает форму, чтобы пользователь мог исправить ошибки.

def create
  @article = Article.new(article_params)
  if @article.save
    redirect_to @article
  else
    render :new, status: :unprocessable_entity
  end
end

redirect_to и render

Два совершенно разных варианта ответа:

  • redirect_to сообщает браузеру, что нужно отправить новый запрос по другому URL.
  • render напрямую возвращает представление для текущего запроса.

После успешной записи выполняйте перенаправление, а для повторного показа формы с ошибками используйте отображение.

Действия перед выполнением

before_action выполняет общую подготовку перед выбранными действиями, уменьшая дублирование. Частый пример — загрузка записи, необходимой для show, edit, update и destroy.

class ArticlesController < ApplicationController
  before_action :set_article, only: [:show, :edit, :update, :destroy]

  private

  def set_article
    @article = Article.find(params[:id])
  end
end

Фильтры и аутентификация

before_action также обеспечивает соблюдение правил. Защитное действие вроде before_action :require_login может выполнить redirect_to login_path и остановить действие, если пользователь не вошёл в систему, защищая сразу целые контроллеры.

before_action :require_login

private

def require_login
  redirect_to login_path unless current_user
end

Обработка отсутствующих записей

Если find не может найти запись, он вызывает исключение RecordNotFound, которое Rails в рабочем окружении преобразует в ответ 404. Вы можете настроить это поведение с помощью rescue_from, чтобы показывать понятную страницу.

rescue_from ActiveRecord::RecordNotFound do
  redirect_to articles_path, alert: "Not found"
end

Быстрая проверка

Проверьте, насколько хорошо вы поняли контроллеры.

Повторение: контроллеры и действия

Вы узнали, как контроллеры обрабатывают запросы:

  • Действия соответствуют маршрутам по соглашению.
  • params содержит данные запроса, а @variables передаются в представление.
  • create сохраняет данные, а затем перенаправляет пользователя или повторно отображает представление.
  • redirect_to и render служат разным целям.
  • before_action выполняет общую подготовку и обеспечивает аутентификацию.

Далее мы защитим массовое присваивание с помощью строгих параметров.

Часто задаваемые вопросы

Урок «Контроллеры и действия» бесплатный?

Да — полный текст урока «Контроллеры и действия» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.

Чему я научусь в уроке «Контроллеры и действия»?

Обрабатывайте запросы Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Ruby Academy?

Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Контроллеры и действия»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Ruby Academy?

Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Маршруты и ресурсы
  2. Контроллеры и действия
  3. Строгие параметры
  4. Представления и отображение
← Назад к Ruby Academy