
Fedor
15.09.2017
12:23:03
в два запроса, или в один вложенный
но тогда придется чистый SQL писать

E
15.09.2017
12:23:57
сьют 270 .. это быстро имхо ...

Google

Fedor
15.09.2017
12:24:03
при использовании правильного запроса, лишние отфильтруются по индексу, который, скорее всего b-tree, то существенно быстрее
пока их мало быстро
но на самом деле это N^2

E
15.09.2017
12:26:15
понимаешь что функция в 3-4 строки, но "ты приехал" тут )) курсы по руби прошел, а эту задачу не знаю как решить )

Fedor
15.09.2017
12:28:21
Ну она достаточно нетривиальная )
смотри, одно решение я тебе уже показал:
Suite.joins(:runs).where.not(runs: {version_id: last_version_id})
оно может быть медленным, если записей много
другой вариант - сделать
suite_ids = Runs.where(version_id: last_version_id).pluck(:suite_id)
Suite.where(id: suite_ids)
это два запроса, но если таких ранов сильно меньше, чем остальных, то будет работать быстрее
только условие проверь, потому что я так и не понял, что же тебе нужно искать

E
15.09.2017
12:33:17
многовато нашлось ... )) тестовой базе 194 suites )
сейчас гляну на что эта цифра в бд может быть похожа )

Google

E
15.09.2017
12:42:08
а в Runs искать нет смысла .. те которые уже есть нам не интересны .. нужны те которых нет ))
нужно взять все сьюты + последнюю версию => и выяснить каких ранов не хватает )
я думал делать цикл по Suites .. их 194 ... у каждой смотреть run.suite.name в version.last, если получаем nil то это типа run который надо создать )
... либо получить массив пробежавших сьют в последней версии и вычесть его из массива всех сьют ...

Fedor
15.09.2017
12:54:20
Погоди
У тебя в принципе runs нет?
Тогда все плохо )
Потому что связь у тебя через runs и именно он хранит idшники, тоесть найти Suite у которых run_id: nill невозможно
Тогда единственный сбособ это джоинить и брать нулв

Radzhab
15.09.2017
12:57:15
Фёдор)
Settlement.create(shift: '1899/12/30 05:00:00')
что тут не так со временем?
shift у меня datetime
Settlement id: 1642, date: nil, shift: nil,....
но в базу заносится nil

Fedor
15.09.2017
12:58:35
Формат неверный
Попробуй заменить пробел между временем и датой на T
или, лучше, просто пихай туда переменную в формате DateTime, тогда ActiveRecord все сделает за тебя

Radzhab
15.09.2017
12:59:27
1899/12/30T05:00:00'

Google

Radzhab
15.09.2017
12:59:44
params[:shift] = DateTime.new(t1.year, t1.month, t1.day, t2.hour, t2.min).strftime("%Y-%m-%d %H:%M:%S")
так я ему итак datetime пихаю

Alex
15.09.2017
12:59:59
Фёдор тут самый отзывчивый помошник! ?

Fedor
15.09.2017
13:00:31
ты делаешь strftime - тоесть приводишь дату к строке и пихаешь строку
пихай прям DateTime

Radzhab
15.09.2017
13:00:53
Ок
она вообще забыла про мои поля
INSERT INTO "settlements" ("date", "rate", "paid", "payment_type", "going_to_work", "appstaff_id", "hirer_id", "position_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?) [["date", "2017-09-06 00:00:00"], ["rate", 6.0], ["paid", 7.0], ["payment_type", 0], ["going_to_work", "f"], ["appstaff_id", 27], ["hirer_id", 1], ["position_id", 1]]

E
15.09.2017
13:02:23

Radzhab
15.09.2017
13:02:24
я сделал вот так
params[:shift] = DateTime.new(t1.year, t1.month, t1.day, t2.hour, t2.min)

E
15.09.2017
13:03:04
вот я получил все id сьют которые были протестированы .. теперь надо [ ] этих сьют отнять от [ ] всех сьют )

Radzhab
15.09.2017
13:03:52
<ActionController::Parameters {"date"=>"08/09/2017", "hirer_id"=>"1", "position_id"=>"1", "appstaff_id"=>"27", "shift"=>Sat, 30 Dec 1899 05:00:00 +0000, "actual_arrival_time"=>Sat, 30 Dec 1899 08:00:00 +0000, "lunch"=>Sat, 30 Dec 1899 08:00:00 +0000, "time_care"=>Sat, 30 Dec 1899 08:00:00 +0000, "rate"=>"", "paid"=>"", "payment_type"=>"cash", "going_to_work"=>"0"} permitted: false>
вот так выглядят параметры вэтот раз
что интересно

Fedor
15.09.2017
13:05:45
чет я ничего не понял

Radzhab
15.09.2017
13:05:46
"date" заносится

Fedor
15.09.2017
13:05:54

Radzhab
15.09.2017
13:05:57
а все другие виды дат нет

Fedor
15.09.2017
13:06:07
ты меняешь параметры, которые тебе приходят от пользователя

Google

Fedor
15.09.2017
13:06:12
надо менять модель

Radzhab
15.09.2017
13:07:04
я для времени использовал textbot
x

Fedor
15.09.2017
13:07:17

Radzhab
15.09.2017
13:07:25

Fedor
15.09.2017
13:07:25
но не все протестированные Suite
смотри

Admin
ERROR: S client not available

Radzhab
15.09.2017
13:07:38
я их в параметрах привожу к типу DateTime
и потом отправляю в модель

Fedor
15.09.2017
13:07:57
ты забиваешь время в форме, жмешь Submit, смотришь, какие приехали параметры
если они не совпадают м тем, что ты забивал, то проблема в форме
если совпадают, то ты их сохраняешь в модель
если ты использовал form_for, то они, скорее всего уже правильно сериализованы, и можно скармливать как есть
сохраняешься модель и смотришь, что в ней
если не сохранилось, то проблема в сохранении

Nikolay
15.09.2017
13:09:46
Скармливать прикольно звучит, такая абстракция

Fedor
15.09.2017
13:10:34
suite_ids = Runs.where(version_id: last_version_id).pluck(:suite_id)
Suite.where(id: suite_ids)
Вот этот код делает то же самое, что и первые три строчки строчки, но на уровне SQL, тоесть быстрее )
Ты фильтруешь SQLем и получаешь из него только suite_id в виде массива
и можешь сразу использовать

Google

Fedor
15.09.2017
13:11:42

Nikolay
15.09.2017
13:12:02
наелась )

Radzhab
15.09.2017
13:12:38
ну как forms_for из строки 05:00 сделает datetime)
поэтому я руками его преобразовывал в него

Fedor
15.09.2017
13:13:18

Radzhab
15.09.2017
13:13:36
вот) получается мне надо в модели их делать

Fedor
15.09.2017
13:13:49
нет

Radzhab
15.09.2017
13:14:03
а хде
в модели вообще пустота
#<Settlement id: nil, date: "2017-09-08 00:00:00", shift: nil, actual_arrival_time: nil, lunch: nil, time_care: nil, actual_hours_worked: nil, rate: nil, amount: nil, paid: nil, debt: nil, payment_type: "cash", comments: nil, going_to_work: false, appstaff_id: 27, hirer_id: 1, position_id: 1>

Fedor
15.09.2017
13:14:48
надо в контроллере сделать
t1 = params.delete(:shift)
resource.shift = DateTime.new(t1.year, t1.month, t1.day, t2.hour, t2.min)
примерно так
тоесть менять не в параметрах, а в модели перед сохранением

Radzhab
15.09.2017
13:16:41
https://snag.gy/zL0SXe.jpg
вот данные в параметрах
а вот в модели

E
15.09.2017
13:18:09

Fedor
15.09.2017
13:20:25
так