@rubyschool

Страница 365 из 921
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" заносится

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
ну как forms_for из строки 05:00 сделает datetime)
Да, но сохранять в params это бесполезно.

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
так

Страница 365 из 921