Переопределение валидаций в 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

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

Заполните форму или свяжитесь
удобным для Вас способом

Контакты

г. Севастополь, ул. Руднева, д.41, 4 этаж технопарк ИТ-Крым +7 978 679-76-353 agro@crimeadigital.ru

Социальные сети

Нажимая на кнопку, вы даете согласие на обработку персональных данных и соглашаетесь c политикой конфиденциальности

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

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

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

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

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

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

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

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

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

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

Лицензия на образовательную деятельность

В 2022 году мы получили лицензию на образовательную деятельность по программам дополнительного профессионального образования! Теперь мы можем обучать специалистов по направлениям Ruby on Rails, ReactJS и Software Testing и выдавать удостоверения о повышении квалификации государственного образца.
В 2022 году мы получили лицензию на образовательную деятельность по программам дополнительного профессионального образования! Теперь мы можем обучать специалистов по направлениям Ruby on Rails, ReactJS и Software Testing и выдавать удостоверения о повышении квалификации государственного образца.

Мы вошли в Реестр эффективно и социально значимых предприятий.

По результатам ежегодной финансово-экономической аналитики Межотраслевой рейтинговой компании Крым Диджитал включена в Реестр эффективных и социально значимых предприятий. По итогу аналитики, в рамках отрасли (ОКВЭД 62.01) и региона Крым, CDG вошло в 4% лучших компаний страны, с результатом – 92 балла!
По результатам ежегодной финансово-экономической аналитики Межотраслевой рейтинговой компании Крым Диджитал включена в Реестр эффективных и социально значимых предприятий. По итогу аналитики, в рамках отрасли (ОКВЭД 62.01) и региона Крым, CDG вошло в 4% лучших компаний страны, с результатом – 92 балла!