Після того, як вдалося отримати в попередній статті робочий варіант веб-програми на Ruby, пішов розбиратися далі з розробкою та генеруванням ресурсів, а також з вивченням архітектури веб -додатків Ruby on Rails. Благо цей фреймворк використовує патерн MVC, який також використовується в Qt, тому в цілому з розумінням архітектури проблем виникнути не повинно.
У процесі пошуку джерел інформації в стилі "Ruby для чайників", "Ruby за 21 день"* і т.д. я натрапив, мабуть, на дуже чудовий ресурс , який є перекладом книги Ruby on Rails Tutorial by Michael Hartl. Перше враження від книги виявилося позитивним. Так що подальше самонавчання, мабуть, проводитиму за цим ресурсом.
З перших плюсів, які виявив, так це згадка середовища розробки RubyMine від JetBrains. Я вже знайомий з такими продуктами, як WebStorm, PHPStorm, Intellij IDEA і заснованої на ній Android Studio, тому на даний момент зупинив свій вибір на середовищі розробки. Що дивно Google за запитами Ruby IDE і аналогічним, не показав інформації про це середовище розробки, мабуть, ще не розкрутилися.
Загалом сповнений світ відкриттів чудових для новачка. Ну а тепер приступимо безпосередньо до генерування ресурсів, які працюватимуть на основі MVC патерну.
Генерування ресурсів USER
У вищезгаданій книзі пропонується після створення першого тестового додатку додати в базу даних таблицю із записами користувачів, а в проект нашого нового тестового блогу всі необхідні для роботи з користувачами файли, тобто сторінки для додавання, видалення, перегляду списку користувачів.
Тобто такі файли:
- db/migrate/20130305221714_create_users.rb
- app/models/user.rb
- test/models/user_test.rb
- тест/прилади/users.yml
- app/controllers/users_controller.rb
- додаток/перегляди/користувачі
- app/views/users/index.html.erb
- app/views/users/edit.html.erb
- app/views/users/show.html.erb
- app/views/users/new.html.erb
- app/views/users/_form.html.erb
- test/controllers/users_controller_test.rb
- app/helpers/users_helper.rb
- test/helpers/users_helper_test.rb
- додаток/перегляди/користувачі
- app/views/users/index.json.jbuilder
- app/views/users/show.json.jbuilder
- app/assets/javascripts/users.js.coffee
- app/assets/stylesheets/users.css.scss
- app/assets/stylesheets/scaffolds.css.scss
Причому ці файли генеруються автоматично з допомогою команди scaffold, яка формує весь необхідний програмний код. Отже, необхідно до бази даних додати таблицю з такого виду:
- id - унікальний ідентифікатор рядка, тип даних integer;
- name – ім'я користувача, тип даних string;
- Email - його поштова адреса, тип даних string.
Для цього переходимо в директорію блогу з автоматично генерованим змістом у минулій статті (у мене це C: Sites blog) і виконуємо наступну команду:
$ rails generate scaffold User name:string email:string
Як бачите, тут не фігурує ID записів, оскільки він генерується автоматично. Параметр User - відповідає ім'я таблиці, причому у результаті генерується таблиця під назвою users. Також у результаті виконання цього програмного коду буде додано ще пару полів у таблиці. Переконатися в цьому можна зазирнувши в базу даних SQLite, а зробити це можна за допомогою програми SQLiteStudio , до речі, рекомендую як дуже зручний інструмент. Додатковими полями будуть дата створення та дата оновлення.
Але переглянути ці дані в базі даних, таким чином Ви спочатку не зможете. Оскільки шаблон був створений, таблиця не була додана в базу даних. Для цього її необхідно оновити, тобто мігрувати доповнення до бази даних наступною командою:
$ bundle exec rake db:migrate
Зізнаюся, у мене це одразу не спрацювало, оскільки я забув встановити bundle. Виправляємо цю ситуацію командою:
$ gem install bundler
Ну а після міграції, запускаємо сервер:
$ rails server
І намагаємось попрацювати з користувачами. Для цього необхідно перейти за наступними адресами у браузері:
URL | Дія | Мета |
---|---|---|
/users | index | сторінка для відображення списку всіх користувачів |
/users/1 | show |
сторінка, що показує користувача з id
1 |
/users/new | new | сторінка для створення нового користувача |
/users/1/edit | edit |
сторінка для редагування користувача з id
1 |
Але в мене ця справа не злетіла, показавши замість очікуваних сторінок сторінку з помилкою.
Справа виявилася в тому, що згенерований код конфліктує з кодом у файлі application.html.erb, який є шаблоном для розміщення інформації про наших користувачів. Після деякого пошуку в мережі, вдалося вирішити проблему зміною параметра application на default
Було:
<!DOCTYPE html> <html> <head> <title>Blog</title> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> <%= csrf_meta_tags %> </head> <body> <%= yield %> </body> </html>
Стало:
<!DOCTYPE html> <html> <head> <title>Blog</title> <%= stylesheet_link_tag 'default', media: 'all', 'data-turbolinks-track' => true %> <%= javascript_include_tag 'default', 'data-turbolinks-track' => true %> <%= csrf_meta_tags %> </head> <body> <%= yield %> </body> </html>
Результат
У результаті вдалося отримати шукані сторінки з додавання користувачів, їх редагування та видалення.