Ruby on Rails - Створення простої програми

І так, ми з вами вже навчилися встановлювати Ruby on Rails, розібрали найбільш базові команди для створення контролерів та моделей. А сьогодні створимо просте додаток, за допомогою якого ми зможемо розібрати та зрозуміти основи роботи у Rails. Складну програму ми робити не будемо, створимо просте To-do додаток зі списком завдань, а в майбутньому будемо додавати новий функціонал. Всі створюють менеджери завдань, чому б і нам не зробити 🙂

Створюємо наш додаток командою rails new TodoApp і переходимо в папку TodoApp, що з'явилася, запускаємо команду bundle install. Додаток створено, тепер нам потрібно зробити хоч мінімальний опис функцій, щоб хоч мінімально розуміти принцип роботи нашої програми.

І так, за допомогоюTodoApp ми зможемо:

  • Додавати, видаляти, редагувати нотатки
  • Відзначати про виконання
  • Відображати лише виконані або невиконані завдання

Цього поки що буде достатньо. У майбутньому нарощуватимемо функціонал, тим самим дізнаємося як легко і просто змінювати додаток.

Створення моделі

Модель це те, як об'єкт виглядатиме в базі даних, які поля буде мати і як вони будуть називатися. Створимо модельtask з полямиtitle,text,status : rails g model task title:string text:text status:boolean . Відкриємо файл у директорії db/migrate і додамо до поля status значення за замовчуванням - 0.

Модель готова, тепер потрібно перенести модель до бази, виконуємо: rake db:migrate . Міграція створюється автоматично при створенні моделі, а попередня команда застосовує всі налаштування в базі - створення таблиць і полів орієнтуючись вказівкам, описаним у файлах які розташовані вдиректорії db/migrate.

Контролер та уявлення

Контролер потрібен для того, щоб обробити запит користувача, вибрати потрібні дані та передати їх через подання користувачеві. Створення контролера виконується командою rails g controller Tasks . Ця команда створить файл контролера app/controllers/tasks_controller.rb , в якому ми описуватимемо різні дії. Кожен метод, оголошений у цьому файлі, відповідає конкретному уявленню.

Тому насамперед ми оголосимо кореневу виставу, та сторінка, яку користувач побачить зайшовши на сайт. Відкриваємо папку app/views/tasks та створюємо в ній файл index.html.erb. Запишемо в цей файл якийсь текст, байдуже, для тесту нам вистачить. Відкриваємо файл контролера та оголошуємо метод з ім'ям index.

Привівши файл до вигляду:

Файли створені, метод є, однак сторінка сама не відобразиться після того, як ви відкриєте сайт, додатку ще потрібно вказати яке подання використовувати як головну сторінку. Відкриємо файл config/routes.rb та приводимо до вигляду:

Тут все дуже просто, root - каже нам, що це уявлення буде використовуватися як головна сторінка і користувачі при заході на сайт будуть бачити її. Tasks – це контролер і index – це метод контролера.

Запускаємо сервер командою - rails s і відкриваємо URL http://localhost:3000/ . У вас повинна з'явитися сторінка з текстом, який ви вказали у файлі app/views/tasks/index.html.erb , якщо звичайно все зробили правильно 🙂

Створення форми

Форма для додавання у нас буде дуже проста, має 2 поля, це Title та Text. Оскільки майже всі дії у нас відбуватимуться на головній сторінці, то форму ми додамо у файл index.html.erb.

У файліконтролера, відредагуємо метод index привівши до такого виду:

Цим ми створимо та помістимо об'єкт нашого завдання у змінну та зможемо надалі працювати з нею.

Додаємо рядок у файл config/routes.rb :

Ресурс потрібний для створення правильних маршрутів для нашого контролера. Поки з цим морочитися не будемо, надалі розберемося докладніше.

Перезавантажимо сторінку і побачимо форму, проте додавати дані до бази вона ще не може, для цього нам потрібно створити пару методів у контролері.

Додавання нотаток

Щоб за допомогою нашої форми ми могли додавати нові завдання, у контролері tasks потрібно створити кілька методів. Наводимо файл app/controllers/tasks_controller.rb до такого вигляду:

Метод create відповідає за збереження даних, отриманих з форми в базу. Приватний метод tasks_params вказує, які параметри (поля форми) дозволені для додавання/зміни. Іншими словами, при спробі передачі параметра якого немає у списку permit(). При успішному збереженні ми можемо вивести на сторінку повідомлення, проте це нам поки що не потрібно. Тепер завдання можуть бути записані до бази.

Як ви помітили, у методі index я додав рядок @tasks = Task.all. Вона потрібна для відображення всіх завдань на цій сторінці, якщо ви хочете всі завдання відображати в іншому місці, потрібно буде додати такий рядок до іншого методу контролера.

Відображення завдань

Відкрийте файл app/views/tasks/index.html.erb та додайте наступне:

Найпростіший висновок інформації, оформленням ми не займатимемося, це ви зможете зробити самі 🙂 У циклі просто виводимо назву та текст нотатки.