Найти тему

Практика Ruby №23(ActiveRecord, rake, рефакторинг AR)

Оглавление

Все материалы для конспекта взяты с rubyschool.us

Миграции Rake

Предварительно должны быть установлены все используемые гемы и должен присутствовать Rakefile и Config.ru

Как делаются миграции:

1) в файле приложения обязательно должно быть следующее:

set :database, "sqlite3:name.db", где name - название базы данных (действительно для SQLite3)

2)Создаем модель. Модель это наш класс с помощью которого мы обращаемся к базе данных, через ActiveRecord

Class Name < ActiveRecord::Base , где Name - название нашего класса
end

3)rake DB:create_migration NAME=name_of migration, где name_of migration - имя миграции.

Эта команда автоматически создает файл миграции с раширением .rb

4) редактирование файла миграции

create_table :names do |t|
t.text :name
t.text :datestamp
t.timestamp
Name.create :name=>'name', :datestamp=>'datestamp'
end

Будет создана таблица с названием names (обязательно смотреть, чтобы было название во множестенном числе), в которой будет 3 столбца: id(создается автоматически) name, datestamp

t.timestamp - дополнительные столбцы в которых будет указана дато создания и дата модификации

Name.create :name=>'name', :datestamp=>'datestamp' создается запись в БД, параметы передаются как хэш

в одном файле миграции можно создать несколько таблиц

5)исполняем rake db:migrate

Рефакторинг кода с использованием ActiveRecord

для post, в файле приложения .rb

создаем объект, с параметром в виде хэша

с = Client.new client[:params]

и сохраняем в бд

c.save

Метод save перед тем как сохранить, делает валидацию значений

для предствления .erb

в теге <input> атрибуту name="" присваеваем значения название столбцов той таблицы в которую вписываем

name="client[name]"/"client[barber]"/"client[phone]"/"client[datestamp]"/"client[color]"

В AR есть метод validates где первым параметром указывается, что проверять, а дальше идет хэш

validates :name, presence: true

для сохранения параметров на странице представления, необходимо в фале приложения в get запросе определить экземпляр класса(глобальный)

в файле представления в атрибуте value="" подставить следующее:

<%= @c.name%>

В этом случае введенные значения будут сохраняться при обнолвении страницы

Сделать страницу для каждого парикмахера:

1) сделать ссылки для нашего списка парикмахеров:

<h2>Список парикмахеров</h2>
<%@barbers.each do |barber|%>
<p>
<a href="barber/<%= barber.id %>"><%= barber.name%></a>
</p>
<%end%>

2)добавить get обработчик:

get '/barber/:id' do
erb :barber
end

3)создаем отдельно представление barber.erb

<h2>Страница парикмахера</h2>
<p>Имя: <%= @barber.name %></p>

4)Объявим переменную которой присваивается значение через поиск id, использую ActiveRecord

@barber = Barber.find(params[:id])