ЧТО ТАКОЕ RUBY ON RAILS
ВЕБ-РАЗРАБОТКА ДЛЯ НАЧИНАЮЩИХ
О ФРЕЙМВОРКЕ
• Еще один фреймворк
• Написан полностью на Ruby
• … by David Heinemeier Hansson
• … как ядро BaseCamp
• 3 146 контрибьюторов на 2016
О ФРЕЙМВОРКЕ
• Conventions over configurations
• DRY (Don`t repeat yourself)
• Поддерживает почти все современные
базы данных
• Удобство и простота в разработке веб-
приложений
MVC PATTERN
В RAILS
МОДЕЛЬ
• ActiveRecord
• SQL/NOSQL
• Соглашения - везде!
• Встроенная валидация
• Миграции
ACTIVE RECORD: MIGRATION
class CreatePublications < ActiveRecord::Migration[5.0]
def change
create_table :publications do |t|
t.string :title
t.text :description
t.references :publication
t.boolean :single_issue
t.timestamps
end
add_index :publications, :publication_type_id
end
end
ACTIVE RECORD: MODEL
class Publication < ActiveRecord::Base
validates :title, presence: true
validates :description, presence: true
#...
end
# How to use:
publication = Publication.new({
title: "Post1",
description: "This is my description"
})
publication.save # => true/false
КОНТРОЛЛЕР
• И тут соглашения!
• Методы и экшены
• Работа с параметрами запроса
• Сессии
• Фильтры
• Безопасность
CONTROLLER: ROUTES
Application.routes.draw do
resources :books
resources :blogs do
resources :publications
end
namespace :api do
resources :users
end
get "/login", to: "sessions#new"
end
CONTROLLER
class PublicationsController < ApplicationController::Base
def index
@publications = Publications.all
end
def show
@publication = Publication.find(params[:id])
end
end
ПРЕДСТАВЛЕНИЯ
• Шаблоны (ERB, HAML, Slim)
• Макеты (layouts)
• Partials
• Helpers
• Ajax
• Переводы и локализация (I18n)
ПРЕДСТАВЛЕНИЯ: HAML
ДОПОЛНИТЕЛЬНЫЕ
ЗАДАЧИ
• отправка почты
• загрузка изображений
• сборка ассетов
• периодические задачи
(sidekiq, delayed_jobs)
ТЕСТИРОВАНИЕ
• Minitests
• Rspec
• Capybara
• Cucumber
TESTS: RSPEC
RSpec.describe TeamsController do
describe "GET index" do
it "assigns @teams" do
team = Team.create
get :index
expect(assigns(:teams)).to eq([team])
end
it "renders the index template" do
get :index
expect(response).to render_template("index")
end
end
end
DEPLOY
• Capistrano
• Mina
• Docker
УЖЕ СКОРО
http://railsclub.ru
CAREER.EVRONE.COM
Join our team
ВОПРОСЫ?
Дополнительные ресурсы:
http://guides.rubyonrails.org/
http://rusrails.ru/
Блоги:
https://robots.thoughtbot.com/web
http://rubyflow.ru/
https://www.railstutorial.org/book
Мои контакты:
Email: kirillov@evrone.ru
Twitter: @kirill0v
Еще мои слайды про Ruby/Rails:
http://www.slideshare.net/ssusercdd0ed

Александр Кириллов. Веб разработка: Что такое Ruby On Rails. РИФ-Воронеж 2016