Переопределение валидаций в Spree Commerce: случай из практики

Дата публикации:

Перед вами статья, которая поможет ответить на вопрос — зачем нужно переопределять дефолтные валидации Spree Commerce? Но для начала — предыстория.

Задача

Работая над e-commerce проектом Saffron, основанном на фреймворке Spree, мы столкнулись с интересной задачей. Клиент пожелал расширить функции интернет-магазина возможностью покупки подарочных сертификатов (Gift Cards). В чем смысл? Представьте: посетитель магазина приобретает подарочную карту, а затем отсылает ее кому-либо из своих знакомых (человеку, который не является пользователем сайта). В результате возникает прекрасная возможность привлечения новых покупателей. Не тех, кто уже зарегистрирован, а лиц, которые впервые зайдут на сайт и прельстятся возможностью получения подарочного сертификата.

SV-1

С технической точки зрения Gift Card — это разновидность кредита (StoreCredit). Соответственно при создании записи в StoreCredit мы обязаны указать получателя сертификата («user_id»). Но потенциальный владелец кредита еще не зарегистрирован. И нам необходимо решить эту проблему.

Как мы это сделаем? Для начала потребуется создать запись в таблице «StoreCredit». В ней — на поле «user_id» (получатель подарочной карты) — стоит валидация «required: true». Но мы еще не можем ничего туда записать. User_id пока неизвестен (см. выше). И вот тут начинается самое интересное.

Примечание

Вполне возможно, что когда вы читаете эту статью, уже вышел релиз новой версии Spree с Gift Cards. Однако на момент ее написания она находилась на стадии разработки.

Мы опишем все возможные способы сохранения записи в таблице StoreCredit с неизвестным user_id. И выберем оптимальный вариант. Готовы? Поехали. У нас получилось три варианта.

Вариант №1: создание временного пользователя

Мы создаем временного пользователя и связываем запись “StoreCredit“ с ним. После этого, когда покупатель зарегистрируется и заберет подарочный сертификат (т.е, введет код сертификата), мы обновляем поле “user_id” этой записи и удаляем временного пользователя.

Плюсы

  • Не надо «играть» с валидациями Spree на бэкэнде;
  • Получатель свободен в выборе электронной почты для регистрации.

Минусы

  • Мы должны исключить временного пользователя из систем трекинга и аналитики (если таковые имеются);
  • Мы должны исключить временного пользователя из почтовых рассылок.

Вариант №2: создание постоянного пользователя с определенным email

Мы можем создать нового пользователя при покупке подарочной карты, используя email получателя и случайно сгенерированный пароль. Таким образом, StoreCredit моментально привязывается к получателю сертификата. После этого ему приходит уведомление на email, и он регистрируется на сайте, используя именно этот email.

В чем разница? В первом случае временный пользователь удаляется, а во втором — получатель карты будет совершать покупки с этого аккаунта.

Плюсы

  • Не нужно исключать пользователя из систем трекинга и аналитики;
  • Не нужно исключать пользователя из списков почтовой рассылки;
  • Не надо «играть» с валидациями Spree на сервере;
  • Отсутствие временных пользователей в базе данных (в БД не будет мусорных записей).

Минусы

  • Пользователь будет обязан регистрироваться, используя именно тот электронный адрес, который был введен при покупке подарочной карты;
  • Если, например, в будущем владелец магазина захочет присылать подарочные карты в бумажном виде по почте, то придется указывать электронный адрес получателя на сертификате — некоторым пользователям это может показаться неудобным или небезопасным с точки зрения сохранности личных данных.

Вариант №3: переопределение валидаций

Мы меняем валидации Spree Commerce на поле `user_id` в таблице StoreCredit.

Плюсы

  • Решает все вопросы, связанные с бумажными подарочными картами: клиент свободен в выборе электронной почты для регистрации;
  • Не нужно исключать пользователя из систем трекинга и аналитики;
  • Не нужно исключать пользователя из списков почтовой рассылки;
  • Отсутствие временных пользователей в базе данных (в БД не остается мусорных записей).

Минусы

  • Применение этого метода потребует некоторых усилий.

Самое правильное решение не всегда самое простое, и нам пришлось удалить существующие валидации Spree в этом поле таблицы. Но обо всем по порядку.
Как происходит переопределение валидаций в Spree?

Сначала нужно удалить «спришные» валидации, а затем уже добавить свои. Почему? Если вы просто добавите свою валидацию на какое-то поле, она не заменит изначальный вариант, а лишь добавится к нему.

Как все это выглядит:

Вывод

Опробовав три различных варианта решения проблемы, мы пришли к однозначному выводу — лучшим из них является переопределение дефолтных валидаций Spree. Во-первых, он более удобный с точки зрения пользователей. Во-вторых — менее ресурсоемкий для разработчиков. Реализация этого решения дала нам возможность гибкой настройки валидаций в интернет-магазинах, основанных на Spree Commerce.

Мы Крым Диджитал

С 2015 года мы предоставляем полный цикл услуг мобильной и веб-разработки клиентам из различных отраслей и разных стран.

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Прошел день карьеры в СевГУ

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая. Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы. Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов — как начать свою карьеру в ИТ? Есть ли возможность совмещать учебу с работой? Кем я смогу стать? Как понять, кем я хочу работать? И многие другие.

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая.

Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы.

Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов - как начать свою карьеру в ИТ?

Есть ли возможность совмещать учебу с работой?

Кем я смогу стать?

Как понять, кем я хочу работать?

И многие другие.

Завершен набор студентов на летнюю практику

Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться — front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.
Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться - front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.

Крым Диджитал приняла участие в стратегической сессии

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.
Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства.

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании.

Следующий курс намечен на август. Не пропусти анонс записи!