Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_по созданию ИС с помощью RoR_2018.docx
Скачиваний:
9
Добавлен:
17.06.2023
Размер:
12.5 Mб
Скачать

9 Многопользовательский режим

Так как с системой одновременно может работать много пользователей, стоит продумать многопользовательский режим работы ИС.

Проблему удаления данных можно решить ограничение прав удаления данных, только для системного администратора. Помните в предыдущем разделе вы создавали пользователя с логином “Admin”? Сейчас он будет являться системный администратором, которому мы дадим права на удаление записей в ИС.А остальные пользователю смогут устанавливать поле «Удаление» для любой записи в положение Trueили False. Таким образом, системный администратор поймет, какие записи хотел удалить пользователь.

  1. Найдите пользователя Admin, и узнайте его id. Сделать это можно просмотрев БД в программе pgAdmin3.

  2. Логика простая. В странице, которой мы хотим запретить удаление данных нужно поставить условие, проверяющее id пользователя присоединенного к текущей сессии. Для этого откройте файл /app/views/dlzhs/index.html.erb и измените код, как показано на рисунке 9.1.

Рисунок 9.1 – Файл index.html.erbсправочника «Должности»

Тольковстроке:

<% ifsession[:user_id] == 2 %>

Не забудьте выставить тот id, под которым находится у вас пользователь с логиномAdmin.

Аналогичные изменения необходимо провести для всех справочников: хобби, сотрудники, хобби сотрудников, пользователи.

Сохраните и проверьте работу страниц. Попробуйте зайти под админом и другим логином и попробуйте удалить запись.

Для работы над изменением записей стоит выводить уведомление, если пользователей в данный момент работает над записью, т.е. текущий пользователь ставит атрибут записи «Статус» в положение Trueили Falseи в зависимости от положения будет выводиться уведомление.

  1. Откройте файл /app/views/dlzhs/edit.html.erbи вставьте после строки:

<h1>Редактирование должности</h1>

новый код:

<% if @dlzh.status==true %>

<p><fontcolor="Red" size="48"><%= flash[:notice] = "Запись находится в состоянии редактирования!" %></font></p>

<% end %>

Сохраните файл. Сделайте аналогичные изменения для остальных справочников. И проверьте работу. Результат должен выглядеть как на рисунке 9.2.

Рисунок 9.2 – Страница изменения записи.

Примечание:

Атрибут «Статус» сначала нужно поставить в положение True и потом изменить запись. После чего будет выводиться уведомление. Предложенный вариант лишь показывает алгоритм работы многопользовательского режима. В реальной ситуации, атрибут «Статус» должен заполняться автоматически при появлении события «Редактирования записи».

Многопользовательский режим готов.

10 Разработка интерфейса

Разработанная в предыдущих разделах информационная система приняла внешний вид, такой какой был установлен в стандартных настройках Ruby. Кому-то они нравятся, а кто-то хотел бы их поменять (ИС, которые работают с большими объемами баз данных интерфейс должен для удобства восприятия содержать какие-либо табличные части). Для выполнения данной операции можно воспользоваться несколькими вариантами.

10.1 Стандартный Интернет-интерфейс

Рассмотрим изменение интерфейса с использованием каскадных таблиц стилей на примере справочника Сотрудники. Работа будет состоять из двух частей: определения набора стилевых правил и подключения этих правил к странице путем определения на ней HTML-атрибута class.

Справочник сотрудники содержит поле «Фото», где предполагается хранение фотографии сотрудника. Данное поле было создано как текстовое поле, поэтому, при заполнении справочника в данном поле будет указываться URL картинки. Для отображения фотографии сотрудника при просмотре справочника необходимо выполнить следующие действия:

1) Необходимо добавить сами изображения (фотографии) в папку проекта, путь к которой: Sotrudniki/app/assets/images (рисунок 10.1).

Рисунок 10.1 – Добавление изображений для справочника

2) Запускаем сервер и изменяем записи справочника Сотрудники, добавив URL определенного изображения к данному сотруднику (рисунок 10.2).

Рисунок 10.2 – Добавление URL изображений в справочнике

Далее приступаем к созданию самого интерфейса. Для этого необходимо место, куда будут помещены определения стиля. Поскольку работа идет с Rails, в этой среде на данный счет есть соглашение, и ранее выданная команда generate scaffolding уже заложила всю нужную основу. Следовательно, можно продолжить работу, заполняя пока еще пустую таблицу стилей sotrs.scss, которая находится в каталоге app/assets/stylesheets.

Для справочника сотрудники создадим следующий стиль, добавив в файл app/assets/stylesheets/sotrs.scss следующий код:

.table_sotr {

margin: 5px;

}

.list_photo {

width: 70px;

heigth: 70px;

}

.list_description {

width: 60%;

dl {margin: 0;}

dt {color: #001;font-weight: bold; font-size: larger; display: inline-block;}

dd {margin: 0;}

}

.list_actions {

font-size: 13px;

text-align: center;

}

.list_line_even {background: #9B9B9B;}

.list_line_odd {background: #D1D1D1;}

Сохраняем измененный файл. Как и в случае с ERb, SCSS не конфликтует с написанным по всем правилам кодом CSS. Роль SCSS заключается в предоставлении дополнительного синтаксиса, позволяющего упростить разработку и обслуживание таблиц стилей. SCSS конвертирует все это в стандартный CSS, который понимает ваш браузер.

И наконец, необходимо определить класс sotrs, используемый этой таблицей стилей. Если посмотреть на уже созданные файлы html.erb, каких-либо ссылок на таблицы стилей вы в них не найдете. Вы даже не .найдете HTML-раздел <head>, в котором обычно находятся такие ссылки. Вместо этого в Rails имеется отдельный файл, используемый для создания стандартной среды окружения страниц для всего приложения. Этот файл по имени application.html.erb, является макетом Rails и находится в каталоге layouts: app/views/ layouts/application.html.erb

<!DOCTYPE html>

<html>

<head>

<title>Sotrudniki</title>

<%= stylesheet_link_tag "sotrs" %>

<%= javascript_include_tag "sotrs" %>

<%= csrf_meta_tags %>

</head>

<body>

<%= yield %>

</body>

</html>

В строке 5 используется вспомогательный метод stylesheet_link_tag(), предназначенный для создания HTML-тега <link>. Этот тег заставляет браузер запрашивать таблицу стилей приложения из каталога app/assets/stylesheets. Этот файл-декларация автоматически включит все таблицы стилей, доступные в этом каталоге и всех его подкаталогах. Это действие выполняется благодаря директиве require_tree. Вместо этого можно перечислить имена отдельных таблиц стилей, ссылки на которые должны быть указаны методом stylesheet_link_tag(), как это и сделано в указанном выше коде. Однако, для того, чтобы данная ссылка заработало, необходимо добавить следующие строки в файл config/initializers/assets.rb:

Rails.application.config.assets.version = '1.0'

Rails.application.config.assets.precompile += %w( sotrs.css )

Rails.application.config.assets.precompile += %w( sotrs.js )

Теперь, когда все таблицы стилей находятся на своем месте, мы воспользуемся простым табличным шаблоном, отредактировав файл index.html.erb в каталоге app/views/sotrs и применив тем самым классы (class) для подключения нужных стилей к определенным объектам представления справочника:

<p id="notice"><%= notice %></p>

<h1>Справочник сотрудники</h1>

<%= link_to 'Новый сотрудник', new_sotr_path %> |

<%= link_to 'Главная страница', controller: 'home_page' %>

<table class = "table_sotr">

<% @sotrs.each do |sotr| %>

<tr class="<%= cycle('list_line_odd', 'list_line_even') %>" >

<td>

<%= image_tag(sotr.photo, class: 'list_photo') %>

</td>

<td class="list_description">

<dl>

<dt><%= sotr.s_fam %></dt>

<dt><%= sotr.s_name %></dt>

<dt><%= sotr.s_otch %></dt>

<dd>Дата рождения: <%= sotr.s_date %></dd>

<dd>Занимаемая должность: <%= sotr.dlzh.d_name %></dd>

<dd>Статус записи: <%= sotr.status %></dd>

</dl>

</td>

<td class="list_actions">

<%= link_to 'Показать', sotr %><br/>

<%= link_to 'Изменить',edit_sotr_path(sotr) %><br/>

<%= link_to 'Удалить', sotr,method: :delete, data: { confirm: 'Вы уверены?' } %></td>

<% if session[:user_id] == 2 %>

<%= link_to 'Удалить', sotr, method: :delete, data: { confirm: 'Вы уверены?' } %>

<% end %>

</tr>

<% end %>

</table>

Для проверки проделанной работы необходимо ОБЯЗАТЕЛЬНО ПЕРЕЗАПУСТИТЬ СЕРВЕР. В результате чего, справочник Сотрудники будет выглядеть следующим образом – рисунок 10.3.

Рисунок 10.3 – Справочник Сотрудники