Size: a a a

Чат по руби

2021 February 19

И

Иван in Чат по руби
тогда сделай - interval '1 second'
источник

И

Иван in Чат по руби
вместо '1 day'
источник

GG

Gleb Grishakov in Чат по руби
Иван
вместо '1 day'
Так точно) Теперь да)
Премного благодарен)
источник

AP

Artemka P. in Чат по руби
всем привет, подскажите плиз в каком редакторе есть такая же фича как в RubyMine на "ctrl + left click" ?
источник

A

AnD in Чат по руби
Добрый вечер guys. Есть у кого книга ?
The Rapid Rubyist
источник

R

Ro in Чат по руби
Кот Программист
пожалуй заведу тег #рецепты #sql
сегодня была интересная задача, писал запрос в базу на Sequel ORM (аналог ActiveRecord)
Мне нужно было вставить условно 100-10000 записей одним запросом используя одинаковые значения для двух полей, однако в этом же запросе мне нужно было запросить поле id из другой таблицы чтобы вставить его как foreign_key
т.е. есть у меня таблица c пользователями
   Column    |  Type   | Collation | Nullable |      Default      | Storage  | Stats target | Description
-------------+---------+-----------+----------+-------------------+----------+--------------+-------------
id          | uuid    |           | not null | gen_random_uuid() | plain    |              |
name        | text    |           |          |                   | extended |              |
и таблица в которую я хотел вставить данные
    Column    |            Type             | Collation | Nullable |             Default              | Storage  | Stats target | Description
--------------+-----------------------------+-----------+----------+----------------------------------+----------+--------------+-------------
id           | integer                     |           | not null | generated by default as identity | plain    |              |
user_id      | uuid                        |           |          |                                  | plain    |              |
type         | text                        |           | not null |                                  | extended |              |
scheduled_at | timestamp without time zone |           | not null |                                  | plain    |              |
Обычно вам нужно вставить к примеру пару строк и вы это делаете так в ActiveRecord
User.create([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }])
если вам нужны инициализированные объекты в ответ или так
Book.insert_all([
 { id: 1, title: "Rework", author: "David" },
 { id: 1, title: "Eloquent Ruby", author: "Russ" }
])
если нужно просто быстро вставить пару row
однако в случае когда у вас есть для одного поля целый массив, а для других предполагается одно и тоже значение, вы могли бы сбилдить обычный рубиновый массив
ids = [1,2,3]
ids.map { |id| { user_id: id, type: :some_type, scheduled_at: Time.now} }
и потом просто сделать insert_all по примеру выше

Однако в моем случае
1. делать запрос в базу за id
2. потом обрабатывать большую коллекцию
3. делать второй запрос чтобы вставить эту информацию в таблицу
слишком долго!

Нужно как-то сделать insert_all чтобы он заполнял одно и тоже значение в двух колонках

Как оказалось на чистом SQL есть примеры на основе которых и можно подумать как это сделать
sql генерируемый обычным insert_all выглядит вот так
INSERT INTO some_table
(id, sheduled_at, type)
VALUES
(1, '2015-01-01', 3),
(2, '2015-01-01', 3),
(3, '2015-01-01', 3),
(100500, '2015-01-01', 3);
...

в некоторых базах данных есть команда unnest
с её помощью можно написать аналогичный sql код вот так
INSERT INTO some_table 
(id, sheduled_at, type)
SELECT
    unnest(array[100, 110, 153, 100500 ...]), '2015-01-01', 3;
и он будет делать все тоже самое что и пример выше.

Осталось только дело за малым, как написать этот код на ruby)
на ActiveRecord никак, можно с Arel может быть, но я не настолько специалист, в любом случае без вставок SQL не обойдется или усилия по изучению Arel просто не будут того стоить

А на Sequel это будет выглядеть вот так
DB[:some_table].import(
 [
    :user_id,
    :type,
    :sheduled_at
 ],
 DB.select(
         Sequel.function(:unnest,
             User.where(id: [1,5,10...10001,10002].select { array_agg(:id) }
         ),
         "ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА",
         Time.now
       )
)
Где array_agg это функция из Sequel использующая одноименную функцию из базы данных PostgreSQL, она позволяет преобразовать группу значений в массив, в моем случае записать результат запроса id в массив (в массив в представлениях базы данных) , таким образом Sequel сгенерирует SQL в котором будет 3 подзапроса.
круто! Надо нам завести свой тех.блог, на движке типа хабра
источник

P

Passqall in Чат по руби
сладкий флуд
источник

P

Passqall in Чат по руби
В теории может биток стоить 1 миллион?
источник

Е

Евгений🐧 in Чат по руби
Passqall
В теории может биток стоить 1 миллион?
да может, в теории их 21 миллион будет а денег на планете 21 трилион , так и задумывалось
источник

P

Passqall in Чат по руби
Евгений🐧
да может, в теории их 21 миллион будет а денег на планете 21 трилион , так и задумывалось
Будем ждать 😁
источник

Е

Евгений🐧 in Чат по руби
Passqall
Будем ждать 😁
ну это только в теории) завтра он может начать падать и опять до 3  - 4 т упасть,  это как казино) повезет или нет) или как ставки)  с инвестированием не имеют ни чего общего
источник

AP

Alexandr Pereverzev in Чат по руби
Ребят, извините что не по теме, но вопрос назрел : кто переболел ковидом и у кого после этого начались фантомные запахи после  потери обоняния.отпишите пожалуйста в личку. Не знаю как бороться и как долго это продлится:(
источник

P

Passqall in Чат по руби
Евгений🐧
ну это только в теории) завтра он может начать падать и опять до 3  - 4 т упасть,  это как казино) повезет или нет) или как ставки)  с инвестированием не имеют ни чего общего
детям в крайнем случае можно оставить)) Ну и судя по последним событиям «инвестирование» можно Reddit-ом поломать 😁
источник

Е

Евгений🐧 in Чат по руби
Passqall
детям в крайнем случае можно оставить)) Ну и судя по последним событиям «инвестирование» можно Reddit-ом поломать 😁
ну да, если только мелкие компании, амазон так не сломаешь например ) денег не хватит)
источник

Е

Евгений🐧 in Чат по руби
Alexandr Pereverzev
Ребят, извините что не по теме, но вопрос назрел : кто переболел ковидом и у кого после этого начались фантомные запахи после  потери обоняния.отпишите пожалуйста в личку. Не знаю как бороться и как долго это продлится:(
я болел запахов нет фантомных
источник

AP

Alexandr Pereverzev in Чат по руби
Евгений🐧
я болел запахов нет фантомных
Обоняние не пропадало?
источник

P

Passqall in Чат по руби
Alexandr Pereverzev
Обоняние не пропадало?
у меня пропадает даже при орви
источник

Е

Евгений🐧 in Чат по руби
Alexandr Pereverzev
Обоняние не пропадало?
тогда да, ни запаха ни вкуса, потом все вернулось, ну ты 2 месяца подожди все пройдет , обычно до 2 месяцев восстановление
источник

k

koba in Чат по руби
Поскажите почему на линуксе на виртуальной машине мне не пришлось ставить драйвера то есть интернет автоматический работает ?
источник

AP

Alexandr Pereverzev in Чат по руби
Евгений🐧
тогда да, ни запаха ни вкуса, потом все вернулось, ну ты 2 месяца подожди все пройдет , обычно до 2 месяцев восстановление
Я уже 3ий без запахов :(
Условно так : при ковиде не чувствовал запах кофе вообще. 0. Теперь нюхаю кофе реакция есть, но лютейший запах гнили и  нашатыря
источник