И так, мы с вами уже научились устанавливать 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.
class CreateTasks < ActiveRecord::Migration def change create_table :tasks do |t| t.string :title t.text :text t.boolean :status, default: 0 t.timestamps null: false end end end
Модель готова, теперь нужно перенести модель в базу, выполняем: rake db:migrate
. Миграция создается автоматически при создании модели, а предыдущая команда применяет все настройки в базе — создание таблиц и полей ориентируясь указаниям описанным в файлах которые расположены в директории db/migrate
.
Контроллер и представления
Контроллер нужен для того, чтобы обработать запрос пользователя, выбрать нужные данные и передать их через представление пользователю. Создание контроллера выполняется командой: rails g controller Tasks
. Эта команда создаст файл контроллера app/controllers/tasks_controller.rb
, в котором мы и будем описывать различные действия. Каждый метод объявленный в этом файле соответствует конкретному представлению.
Поэтому первым делом мы объявим корневое представление, та страничка, которую пользователь увидит зайдя на сайт. Открываем папку app/views/tasks
и создаем в ней файл index.html.erb
. Запишем в этот файл какой-то текст, не важно, для теста нам хватит. Открываем файл контроллера и объявляем метод с именем index
.
Приведя файл к виду:
class TasksController < ApplicationController def index end end
Файлы созданы, метод есть, однако страница сама не отобразится после того как вы откроете сайт, приложению еще нужно указать какое представление использовать в качестве главной страницы. Откроем файл config/routes.rb
и приводим к виду:
Rails.application.routes.draw do root 'tasks#index' end
Тут все предельно просто, root
— говорит нам, что данное представление будет использоваться как главная страница и пользователи при заходе на сайт будут видеть её. Tasks
— это контроллер и index
— это метод контроллера.
Запускаем сервер командой — rails s
и открываем url http://localhost:3000/
. У вас должна появится страничка с текстом который вы указали в файле app/views/tasks/index.html.erb
, если конечно все сделали правильно 🙂
Создание формы
Форма для добавления у нас будет очень простой, имеет 2 поля, это Title
и Text
. Поскольку почти все действия у нас будут происходить на главной странице, поэтому форму мы добавим в файл index.html.erb
.
<%= form_for @task do |f| %> <%= f.text_field :title %> <%= f.text_area :text, size: "40x8" %> <%= f.submit "Add Task" %> <% end %>
В файле контроллера, отредактируем метод index
приведя к такому виду:
def index @task = Task.new end
Этим мы создадим и поместим объект нашей задачи в переменную и сможем в дальнейшем работать с ней.
Добавляем строчку в файл config/routes.rb
:
resources :tasks
Ресурс нужен для создания правильных маршрутов для нашего контроллера. Пока с этим заморачиваться не будем, в дальнейшем разберемся подробней.
Перезагрузим страницу и увидим форму, однако добавлять данные в базу она еще не может, для этого нам потребуется создать пару методов в контроллере.
Добавление заметок
Чтобы с помощью нашей формы мы могли добавлять новые задачи, в контроллере tasks нужно создать пару методов. Приводим файл app/controllers/tasks_controller.rb
к следующему виду:
class TasksController < ApplicationController def index @task = Task.new @tasks = Task.all end def create @task = Task.new(tasks_params) if @task.save redirect_to root_path else redirect_to root_path end end private def tasks_params params.require(:task).permit(:title, :text) end end
Метод create
отвечает за сохранение данных полученных из формы в базу. Приватный метод tasks_params
указывает какие параметры(поля формы) разрешены для добавления/изменения. Другими словами, при попытке передачи параметра которого нет в списке permit()
. При успешном сохранении мы можем вывести на странице сообщение, однако это нам пока не нужно. Теперь задачи могут быть записаны в базу.
Как вы заметили, в методе index
я добавил строчку @tasks = Task.all
. Она нужна для отображения всех задач на этой странице, если вы хотите все задачи отображать в другом месте, нужно будет добавить такую строку в другой метод контроллера.
Отображение задач
Откройте файл app/views/tasks/index.html.erb
и добавьте следующее:
<% @tasks.each do |t| %> <%= t.title %> <%= t.text %> <% end %>
Самый простой вывод информации, оформлением мы заниматься не будем, это вы сможете сделать сами 🙂 В цикле просто выводим название и текст заметки.
На этом я статью закончу, длинной получилась, в следующей статье научимся удалять/редактировать заметки и добавим категории с метками.