
Моделі | Ruby on Rails
Основи моделей. Зв'язок між моделями. Валідація та колбеки
Контролери в Ruby on Rails - це складова частина MVC (Model-View-Controller), архітектурного шаблону, що використовується для побудови веб-додатків. Вони відповідають за обробку вхідних запитів від користувачів та взаємодію з моделями та представленнями (виглядами). Контролери містять методи, які називаються «діями» (actions), і кожна дія обробляє певний тип запиту.
Для створення контролерів у Rails використовується генератор. Він автоматично створить необхідні файли та структуру для вашого контролера. Команда для створення контролера має такий вигляд:
rails generate controller ControllerName
Замініть "ControllerName" на бажану назву вашого контролера.
Контролери зазвичай розташовуються в директорії «app/controllers» у вашому Rails проекті. Кожен контролер - це клас, що успадковується від класу ApplicationController. Наприклад:
class UsersController < ApplicationController
# код контролера тут
end
У контролерах можуть бути різні дії, які відповідають на різні запити від користувачів. Типові дії це, наприклад, index, show, new, edit, create, update, destroy та інші. Назви дій зазвичай використовуються у маршрутах (routes) для визначення, яка дія повинна бути виконана для конкретного URL.
Дії контролерів можуть приймати параметри з URL. Наприклад, якщо ви маєте дію, яка приймає id користувача з URL, ви можете звернутись до цього параметра так:
class UsersController < ApplicationController
def show
user_id = params[:id]
# зробіть щось з user_id
end
end
Кожна дія контролера повинна повертати відповідь на запит. Зазвичай це рендеринг представлення (вигляду), який відображає сторінку для користувача. Наприклад:
class UsersController < ApplicationController
def index
@users = User.all
# рендеримо вигляд index
end
end
Змінні, визначені у дії контролера, можуть бути використані у вигляді (представленні). Наприклад, якщо ми визначили змінну @users у дії index, ми можемо її вивести у вигляді index:
#/ app/views/users/index.slim
h1 Користувачі
ul
- @users.each do |user|
li = user.name
Фільтри дозволяють виконувати код перед або після виконання дій контролера. Наприклад, вам може знадобитись перевірити, чи користувач має права доступу до дій контролера перед виконанням дії. Фільтри допомагають зберегти код чистим та організованим.
Уявімо, що вам потрібно перевірити, чи користувач має право редагувати певний запис перед виконанням дії «edit»:
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
before_action :authorize_user, only: [:edit]
def edit
@post = Post.find(params[:id])
end
private
def authorize_user
# код перевірки прав доступу користувача тут
# наприклад, перевірка, чи користувач є власником запису
unless current_user && current_user == Post.find(params[:id]).user
redirect_to root_path, alert: "Ви не маєте прав для редагування цього запису"
end
end
end
У Ruby on Rails існує підхід, який називається «ресурсними маршрутами», який дозволяє створити стандартні маршрути для контролерів, які відповідають CRUD-операціям (створення, читання, оновлення, видалення) над ресурсами вашого додатку.
Для використання ресурсних маршрутів визначте маршрут у файлі «config/routes.rb» таким чином:
resources :controller_name
Замініть «controller_name» на назву вашого контролера. Наприклад, якщо у вас є контролер для користувачів (users), ви можете використовувати наступний код:
resources :users
Rails автоматично згенерує стандартні маршрути для цього контролера, що включають URL для списку користувачів, перегляду одного користувача, створення користувача, оновлення та видалення.
Контролери в Ruby on Rails відіграють ключову роль у взаємодії з користувачем та обробці вхідних запитів. Вони дозволяють зберігати логіку взаємодії з даними в окремих компонентах, що робить ваш код більш організованим та легше зрозумілим.
У розділі про контролери ми розглянули створення контролерів, дії, параметри, використання змінних у виглядах, фільтри та ресурсні маршрути. Надіюсь, ця стаття допоможе вам легше зрозуміти та почуватись більш впевнено в розробці з використанням Ruby on Rails. Вивчайте далі та успіхів у вашому програмістському шляху! 😊