
Nikolay
27.08.2016
09:22:07
а я начинаю костыль корзину предварительного заказа в рельсы :)

Mikhail
27.08.2016
09:22:37
нужно оперировать турболинками turbolinks:load ready
вроде так, чтобы скрипт инициализировался

Vitaliy
27.08.2016
09:23:13

Google

Mikhail
27.08.2016
09:23:20
я видел
Я новый проект заводил на 5х. Но решил отказаться
много болячек нахватал с разными лайотами, да и дум по мне медленно обновлял. Решил убрать

Vitaliy
27.08.2016
09:25:03
да, старт достаточно неприятный.

Mikhail
27.08.2016
09:26:00
думаю что прироста большого не будет у них. Может быть на мобильном слабом
по крайне мере я у фрея http://rubycourses.ru/ тут смотрел что турболинки сделали

Nikolay
27.08.2016
09:27:03
так. а вот посоветуйте, мне, о гуру. вот у меня есть допустим список с кнопкой "добавить в корзину". по кнопке этот элемент влетает в сессию в редисе, сам заказ я уже думаю держать в активрекорд т.к история платежей и прочие снимание бабла со счёта

Mikhail
27.08.2016
09:27:11
когда вы косяки с n+1 уберете
можно будет заценить скорость

Vitaliy
27.08.2016
09:27:20

Mikhail
27.08.2016
09:27:46
пока болячек много у проекта. Жду когда почистите, можно будет реально взглянуть

Nikolay
27.08.2016
09:27:46
правильно я мыслю тему предварительной корзины заказа

Mikhail
27.08.2016
09:28:16
А ща тормоза все, из-за кривых запросов в бд. Поэтому медленно работает

Google

Vitaliy
27.08.2016
09:28:35

Nikolay
27.08.2016
09:28:48
ок. распишши
всяко лучше чем свои грабли собирать

Mikhail
27.08.2016
09:29:20
все таки лучше первый раз свои собрать
А если че валится спросить

Vitaliy
27.08.2016
09:30:43
думаю что прироста большого не будет у них. Может быть на мобильном слабом
Смотря с чем сравнивать в плане прироста. С полной перезагрузкой страницы - прирост будет в UX. Грузиться так-то будет ненамного меньше и ненамного быстрее, но обновляться страница будет уже без полного обновления (белый экран, появление текста, FOUT на шрифтах).
Если сравнивать с SPA и json респонзами - работать будет однозначно медленнее. Тут турболинки выигрывают простотой поддержки - не нужно распыляться между стеками технологий, сайт остается традиционным для рельс фулл-стек, с сервер-сайд рендерингом

Mikhail
27.08.2016
09:31:36
пофикси на rubycources n+1
посмотрим скорость
а то пока это очень очень очень медлено

Vitaliy
27.08.2016
09:33:17
нехило проседает

Mikhail
27.08.2016
09:33:22
а вот тот же запрос

Vitaliy
27.08.2016
09:33:28
чиркану тикет в репозитории

Mikhail
27.08.2016
09:33:40
уже с кэшем

Vitaliy
27.08.2016
09:33:47
или можешь ты чиркануть, как раз со скринами будет

Mikhail
27.08.2016
09:34:06
пофиксить n+1 дырки
просто скажи фрею
он же опытный разраб

Vitaliy
27.08.2016
09:34:18
https://github.com/Freika/ruby_courses/issues

Nikolay
27.08.2016
09:34:24
так. народ, опять туплю. как мне сделать санитайзинг для текстовой строки из параметров?

Mikhail
27.08.2016
09:34:36
где

Google

Mikhail
27.08.2016
09:34:38
в модели?

Nikolay
27.08.2016
09:34:42
в контроллере в методе
это просто строка, не модель

Mikhail
27.08.2016
09:34:59
тебе надо заинклюдить хелпер
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

Nikolay
27.08.2016
09:35:13
какой?

Mikhail
27.08.2016
09:35:15
вот этот
strip_tags(тут текст)
ну или какой тебе там надо сатинизер

Nikolay
27.08.2016
09:35:38
а насчет всяких sqlinjections и прочаа
я хочу чтобы строка очищалась от всего ваще, до состояния =~ /a-zA-Z\./

Mikhail
27.08.2016
09:36:24
ну и прогони регексп

Mikhail
27.08.2016
09:37:27
хелпер смотри

Nikolay
27.08.2016
09:38:02
блин. а как его в рельсовой консольке заинклудить..
для экспериментов

Mikhail
27.08.2016
09:38:31
@TurnaviotovNikolay http://apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize вроде это
@TurnaviotovNikolay include HELPERNAME
?

Nikolay
27.08.2016
09:40:15
та оно его полностью include ActionView::Helpers::SanitizeHelper

Mikhail
27.08.2016
09:40:19
да

Google

Nikolay
27.08.2016
09:40:19
отак сьело
хм. вроде линки/таги оно сносит..


Vitaliy
27.08.2016
09:47:06
ок. распишши
1. Корзина - это заказ (order) в дефолтном статусе "неоформленный"
2. Для статусов можно обычный enum, рельсовый или, например, enumerize. Можно AASM. Мне нравится AASM, т.к. управлять легче, в 90% случаев модели в рельсе - конечные автоматы, и их enum-статусы - это состояния конечных автоматов
3. Для такого заказа мы заводим хелпер current_order. Хелпер хитрый - либо берем существующий в БД, либо инициализируем новый через Order.new
4. Через этот хелпер выводим, например, корзину на сайте
5. Этот же хелпер используем в экшне добавления товара в корзину, в том числе и первого. Просто в параметрах контроллера (там где делаем permit) добавляем merge(order: current_order). В итоге товар при сохранении в базу, связывается с новым заказом, который тоже сохраняется в базу - и становится доступен залогиненному пользователю между сессиями
6. Заказ здесь - это ресурс, который по всем характеристикам должен принадлежать пользователю user, но создаваться может, когда пользователь еще не залогинился, и current_user еще нет.
7. Такие ресурсы связываем не напрямую с пользователем, а с объектом "сессией" (это модель в БД, user_session, а не рельсовый хелпер session[:id]).
8. Точно так же заводим хитрый хелпер current_user_session, который будет либо брать юзер-сессию из БД, либо инициализировать ее в виде UserSession.new. И точно так же, как заказ привязывается к добавленному товару, сессия привязывается к заказу.
9. ID юзер-сессии мы либо храним в рельсовой сессии session[:user_session_id] (если пользователь незалогинен), либо получаем его из current_user (если пользователь залогинен)
Таким образом: (а) заказ и другие ресурсы, который может создавать гость - будут сохраняться в БД и будут доступны между сессиями и устройствами, (б) за счет дополнительной связки в виде user_session мы упрощаем себе жизнь с слиянием аккаунтов (когда человек на одном устройстве залогинился и надобавлял в корзину, потом на другом устройстве надобавлял в другую корзину и залогинился - обе его сессии привяжутся к одному user, и обе корзины будут доступны пользователю для дальнейшего оформления


Nikolay
27.08.2016
09:48:03
так. я чот понял что нифига не понял
как оно с другого девайса корзину подхватит

Aldar
27.08.2016
09:48:30
про реакт вообще тема, нужно четко понимать зачем он вообще нужен

Nikolay
27.08.2016
09:48:33
ключ ему чтоли сообщать

Aldar
27.08.2016
09:48:54
а так рельсы с турболинками вполне себе для многих задач хватает

Admin
ERROR: S client not available

Vitaliy
27.08.2016
09:49:13
и user_session привязалась к user

Aldar
27.08.2016
09:49:27
была недавно история что выпилили реакт из проекта с эликсиром и фениксом и впилили турболинки

Mikhail
27.08.2016
09:49:27

Vitaliy
27.08.2016
09:50:14
Скопировал свое сообщение в черновик поста, хочу дополнить и выложить в блоге как завершенную методику с кодом, скину ссылку когда запущу блог и выпущу заметку

Nikolay
27.08.2016
09:57:14
смотри. проблема в том, что это не заказ, а предварительная проверка выбранного домена к регистрации
свободен/нет. поэтому я его сую в кеш редиса, чтобы он там через полчаса протух

Vitaliy
27.08.2016
09:58:06
Тогда тема с юзер-сессией не нужна, если твоя цель - лишь кеширование

Nikolay
27.08.2016
09:58:10
при логине в девайс эта корзина сохраняется. при логоффе теряется

Vitaliy
27.08.2016
09:58:31
Тогда нужна :)

Google

Nikolay
27.08.2016
09:58:39
просто корзина и оформления заказа уже в рамках зареганного и залогиненного юзера

Vitaliy
27.08.2016
09:58:42
Ну то есть не обязательно она нужна, но что-то подобное

Nikolay
27.08.2016
09:59:27
а там уже активрекорд и нормальная модель
ибо таки история заказов

Vitaliy
27.08.2016
10:00:28
Тут ведь еще можно двумя вариантами поступить.
1. Либо хранить все это как заказ с состояниями (статусами). Удобно, учитывая, что структура модели одна и та же, и крайне плавно перетекает из потенциального заказа в оформленный
2. Либо хранить корзину в одной модели, а заказ - в другой.
Второй вариант тоже имеет право на жизнь и достаточно распространен
Применительно к интернет магазинам это реализуется любопытно :)
Есть корзина, если к ней привязан объект ordered_order - значит это уже не просто корзина, а корзина оформленного заказа. А если к этому ordered_order привязан объект delivered_order - значит этот заказ не просто оформлен, но еще и доставлен
и в каждом таком маленьком объекте (суть - маленькой модели) хранится свой маленький кусочек данных
вот можно этот вариант применить в вашем случае

Nikolay
27.08.2016
10:03:21
мне второй вариант пока проще
ибо домен в корзине - строка
фейлит, скотина session[:domains] ||= []) « sanitize(params[:domain].strip))

Vitaliy
27.08.2016
10:06:16
Может лучше хранить в сессии ID, а сами строки в редисе? Со объектами длиннее числа, в сессии не очень гладко все-таки

Nikolay
27.08.2016
10:06:22
а..
у меня сессмия в редисе ;)

Vitaliy
27.08.2016
10:06:38
session[:domains_id], например
а, то есть не в куках?

Nikolay
27.08.2016
10:08:20
вот как раз сегодня в редиску завернул

Vitaliy
27.08.2016
10:08:45
прям интересно стало, а так реально можно делать? интересно, как стыкуется API редиса с сеттерами и геттерами хелпера session

Nikolay
27.08.2016
10:09:07
а session.inspect вообще адов высер ))
1472290207.794413 [1 127.0.0.1:50186] "get" "session:cf5c728e7caff7946023789ea669a2d2"