Это копия, сохраненная 31 июля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Arhivach: http://arhivach.net/thread/610822/
Ruby thread 2021 Pandemic Recovery EDITION
ИЗУЧЕНИЕ ЯЗЫКА
Q: C чего мне начать, чтобы стать рубистом?
A: Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и те же вещи, дальше читаем Ruby Way, затем познаем метапрограммирование с Metaprogramming Ruby.
А дальше открываем Ruby cookbook 2015 года, Пишем свой код во время чтения.
Q: Следующий уровень, продвинутые книги по руби:
A: Confident Ruby by Avdi Grimm | Practical Object-Oriented Design in Ruby
Refactoring Ruby Edition | Ruby Under a Microscope
Q: Онлайн курсы чтобы попробовать/вкатиться:
A: https://ruby.github.io/TryRuby/ | https://rubymonk.com/
https://www.codewars.com/?language=ruby | http://rubykoans.com
Q: Какой gem посмотреть, чтобы понять, как писать код?
A: Лучше всего посмотреть небольшие gem'ы вроде cancancan, pundit, camping.
Еще можешь полистать на гитхабе гемы с нарастающей популярностью (там еще нет тысяч строк, и тебе будет легче понять): https://github.com/trending?l=ruby
Q: Хорошие практики по руби и рельсам?
A: Обязательно стайлгайды (как оформлять код):
https://github.com/rubocop-hq/ruby-style-guide
https://github.com/JuanitoFatas/fast-ruby
https://github.com/rubocop-hq/rails-style-guide
Руководства "для чайников":
https://www.railstutorial.org/book [en]
https://www.theodinproject.com/tracks/1 [en] | http://codenamecrud.ru/ [ru]
Еженедельная рассылка с новостями из руби мирка:
https://rubyweekly.com
Прочая годнота:
https://github.com/markets/awesome-ruby
Q: Документация по стандартным библиотекам руби и рельс:
A: https://ruby-doc.org/ | https://api.rubyonrails.org
https://guides.rubyonrails.org
Q: Можно ли на руби писать нативные GUI, мобильные приложения, игры?
A: Да, но не стоит.
Q: Что ещё изучить?
A: Английский, git, linux. Паттерны. Один из часто используемых – Service Object.
https://www.sitepoint.com/7-design-patterns-to-refactor-mvc-components-in-rails
СРЕДА РАЗРАБОТКИ
Q: Как установить разные версии рубей?
A: https://rvm.io | https://github.com/rbenv/rbenv | https://github.com/asdf-vm/asdf
Q: Есть ли чат в Telegram?
A: @LearnRubyForPikabuChat | @rubylang | @rubyschool | @rubyrush
@pro_rb | @saintprug | @moscowrb | @ruby_talks | @ruby_random
Отсортированы по размеру
Паблики в Telegram
@LearnRubyForPikabu | @ruby_rails_tips_tricks | @painless_rails_ru | @ruby_bookshelf
РАБОТА
https://hh.ru/search/vacancy?text=ruby
https://t.me/rubyjob
МИНИМУМ НА ДЖУНА
ToDo: Здесь обязательно появится минимальный набор знаний и умений на джуна (что должен уметь вкатун-рельсовик), как найти первую работу и т.д.
Но это потом.
https://www.youtube.com/watch?v=0kM7yFM6Dao
Зимний митап Saint P Ruby Community 2021! ДА, И СТРИМ И ЗАПИСЬ БУДУТ.
25 февраля на площадке Купибилета,
Стартуем, как обычно в 19.00.
Докладчики и доклады:
1. Ну собственно Шаматов. Я расскажу про Dry CLI: проект, над которым я периодически работаю.
2. Юлиан Покровский расскажет про Алгоритмы и структуры данных для рельсовика.
3. Владимир Дементьев настолько хорош, что у него есть 4 доклада, и он шафлом выберет тот, который расскажет нам.
4. Михаил Грачев расскажет про Линтеры, которые на страже порядка
25 февраля в 19:00
Литейный пр. 26, St. Petersburg, Russia
Регистрация обязательна: https://kommunity.com/saintpruby/events/winter-meetup-2021-6b2d4c4f
Стрим, предположительно, здесь
https://www.youtube.com/c/SaintPRubyCommunity
Ну шо, вкатились?
перекатились.
Померли.
Аналогично, сейчас думаю куда перекатиться, вакансии сплошное говно из CMS
Тоже думаю, пока времени мало, на работе проект добьем и начну прожект писать. А так, бложик пробовал писать 1в1 Лара, синтаксис пока до конца не понял, немного не привычен. Зато был сильно удивлен увидев количество вакансий на удалёнке, особенно забугорных.
Работаю в васянском хайлоаде на yii, заглядываю в Руби тренд потому что язык красивый, но работ нет а хайлоада уж точно
На западе есть.
А что нереального в становлении джуном?
Вполне реально. Тем более что разрабов сейчас не хватает. Многие работодатели растят сами из совсем неофитов для инхауза, но на хх.ру ты их врядли найдешь.
Где обычно зависают? Как-то в телеге иногда попадались в чатах, может какие каналы полезные есть?
Нашел один интересный https://t.me/rubyjob кстати, большей части вакансий нет на хх.ру, забавно)
А ты сам как давно вкатился? На удаленке у западного барина?
Антош, скажи честно вкатываться в руби - хорошая идея?
Нет. Пиздят про то что вкатиться джуном реально, но на самом деле это реально только для хохлов, у которых почему-то RoR крайне распространён и из которых состоит данный тред, судя по всему. Лучше вкатывайся в пхп, без иронии говорю.
мимо
И такой вопрос, есть ли по рубину продуктовые компании, или только АУТСОУС? Не хочу в аутсорсе работать =(
Руби дрочит память и сборщик мусора, других минусов нет.
Рельса всё еще лучшей фреймворк для веба.
Сейчас на стадии переката, учу-дрочу язык и рельсы прожект пилю, если с Yii или Laravel работал то ROR на 95% тоже самое. Синтаксис языка только непривычен как-то, но в целом с пыхи нет проблем перекатываться. По вакансиям местные подскажут, но я мониторю хх.ру потихоньку там много продуктовых попадалось.
Да, без иронии говорю.
смолтолк
Да, классный язык. Параллельно с рубями на нем что-то пишу, очень нравится всё это функциональное, парадигма новая, все дела.
Clojure это лисп: нотация на s-экспрешшенс, негигиеническая макросистема в духе коммон лисп, динамический и лексический скоуп.
Отличия от коммон лиспа на языковом уровне - нормал ордер редакшн(ленивые вычисления) по умолчанию и наличие в стандартной библиотеке иммутабельных структур данных, литералы для всех дефолтных структур(мап, сет, вектор, лист). Если кратко то как-то так.
Common Lisp довольно жирен и дизайн стандартной библиотеки там говно, кложка же проста, компактна и в ней много полезного, предпочитаются иммутабельные структуры данных и использование функций высшего порядка везде(струтурирование программы с помощью последовательных трансформаций данных выраженных через map/filter/fold), тут явно вин.
С другой стороны коммон лисп генерил нативные бинарники и с тайп хинтами и аннотациями для компиляции там получался очень быстрый машинный код, кложка же живет поверх JVM, это не то чтобы совсем ужасно но отличия есть, так что тут вин не очевиден.
А в целом вон есть рэкет(лисп с гигиенической макросистемой, оченоь продвинутой) но не пригоден для использования(на нем ничего не написано).
Так что, да, соглашусь кложка очень аккуратна.
А рубик сам по себе хорош, ООПшка с кодогенерацией на основе неплохой макросистемы, очень чистый и приятный синтакс.
И рубик и кложку делали люди со вкусом.
(.toUpperCase "fred")
-> "FRED"
(.getName String)
-> "java.lang.String"
(.-x (java.awt.Point. 1 2))
-> 1
(System/getProperty "java.vm.version")
-> "1.6.0_07-b06-57"
джавку можно звать прямо из кложокода
хотя если мидл, то гораздо быстрее может будет
> язык, у которого даже нет своего треда.
Давай сравним количество вакансий на популярном в php (на котором большая часть сайтов) фреймворке laravel и количество вакансий на рельсах, если из пыхи выкинуть говностудии где клепают визитки, а лару прикрепили для красного словца, то будет +/- одинаково. Думаю говорить о какой-то мертвости языка бессмысленно, а на забугорных рынках его доля и того больше, тем более сейчас вышла 3 версия, которая в разы быстрее (ситуация примерно как с выходом 7 пхп), скоро потихоньку в проде начнет появляться, до смерти еще далеко, вон джаву уже сколько лет хоронят, а на спринге сейчас 3000 вакансий. Думаю не стоит делать необдуманных и импульсивных выводов. Шел бы ты уже отсюда, долбоеб
Извини, ты прав.
>вышла 3 версия, которая в разы быстрее
Насколько я знаю, быстрее она только по сравнению с с 2.0, а это уже давно легаси. Начиная с 2.4 разница не такая большая, и многие оптимизационные фичи нужно ебаться и включать руками.
Книга про кодогенерацию на рубике. Таких книг не много в принципе, так что читать однозначно стоит, особенно если хочешь быть адвансд девелопером. Например рэйлз использует кодогенерацию по полной, чтобы тебе вручную бойлерплейт не писать.
Если не знаешь што такое кодогенерация то вот пример: запускаешь irb, пэйстишь в irb пример отсюда
https://en.wikipedia.org/wiki/Ruby_(programming_language)#Metaprogramming
далее
irb(main):032:0> "".methods.grep /in_/
=> [:in_red, :in_green, :in_yellow, :in_blue, :in_black, :in_white, :in_magenta, :in_cyan]
irb(main):033:0> "Something".in_red
=> "<span style=\"color: #f00\">Something</span>"
Очень годная, хорошо оформлена и структурирована, простой английский без всяких мудацких выражений, разбита по дням, в конце каждого дня - практическая задача. Совсем зеленым нубам не подойдет, так как требует базового понимания происходящего и определенного опыта, остальным рекомендую к изучению.
Что из себя представляет работа на руби? Делать скучные круды и просто получать килобаксы? Вы не выгораете от этого?
Че?
Выстраиваем архитектуру хайлоад приложений, расфасовываем микросервисы по кубернетсам, двигаем мировую сферу веб-разработки вперед, получаем килобаксы.
Пробиваем рельсы АК'ом.
Скаффолжу круды на аутсорсе. Делаю вид, что занимаюсь КРУДами часами, на деле прописываю все через одну команду. Платят много.
Зачем другие языки? Руби вполне справляется, вынос из рейлс-монолита в микросервис и горизонтальное масштабирование решает проблему и без подключения других языков.
Зачем и почему?
Некоторым людям удобно, когда текстовый редактор управляется с клавиатуры.
Другим это неудобно и они используют текстовики с графическим управлением мышкой + иногда хоткеи.
А третьи используют IDE. Зачем — незнаю.
Никто не спрашивал, на чем какой сайт был написан, вообще-то.
4 марта в 17:00 эксперты из компании UMBRELLIO и MPI поделятся своим практическим опытом в ruby разработке.
Программа митапа:
17:10 — Рустам Ибрагимов, "SmartCore (smart-rb) — a set of common abstractions and principles, realized in scope of Ruby, DDD and Clean Architecture"
17:50 — Александр Ильчуков, "MPI: композитные атрибуты моделей данных"
18:30 — Астхана Аникет, "Метрики эффективности сервиса"
Регистрация по ссылке
https://umbrellio-event.timepad.ru/event/1535736/
Зато своё, полноценно отечественное.
Я запустил все через docker-compose и собирался так и разворачивать на сервере.
Потом мне дяди сказали что это не ок и нужно пердолить куб.
Вроде как запердодил все на k3s. Осталось настроить пару вещей.
Смущает то что:
1. У меня всего 1 хост 2cpu/2gb ram
2. После установки докера и k3s - минус 700мб ram
3. Какого хуя, раньше же хватало 1gb на простые приложения?
Это простое api приложение pet проект.
С другой стороны, сейчас я могу пердолить все с компа, без всяких scp и переноса инфы чтобы что-то запустить. Так же, если правильно понял, не придется пердолиться с конфигами nginx'a.
Еще я запустил private registry. Но буду его отключать после пуша.
А мог бы арендовать виндосервер, поставить туда denwer или openserver и таскать проекты мышкой по папочкам версия1, версия22 и т.д.
Я больше балУюсь. Может быть предложишь еще 1с?
Текстовая версия https://evrone.com/yukihiro-matsumoto-interview-2021
https://www.youtube.com/watch?v=B-UFFo4M-04
Он же не фюрер вроде Гвидо, ничего не изменится.
А в треде разработчики с України есть? Как дела с руби в Украине или вы все на западного барина работаете?
Посмотри на доу.юа информацию. Я сам вкатываюсь только, но вроде как в Украине не так уж и плохо с местными вакухами, если ты в каком-нибудь Харькове или Киеве.
Во Львове много руби контор.
>или вы все на западного барина работаете
Разумеется, ты либо напрямую работаешь на западного заказчика, либо через контору. Разве бывает иначе?
Уже ставшая традицией встреча Рубистов пройдет в 13-ый раз!
И если ранее митап проходил в офлайн режиме на одной из московских площадок, то предстоящий митап пройдет на онлайн-платформе и стать участником может любой желающий, без привязки к геопозиции.
Программа:
19:00 Григорий Петров (Evrone) — Почему Ruby медленный?
19:45 Евгений Фатеев (VK Работа) - Learning to Rank вместе с Ruby
20:30 Молчанов Андрей (Uscreen) - Краткая история кеширования
21:15 Цепелев Дмитрий (Evil Martians) - Как ускорить GraphQL API
11 марта 19:00–21:00
Регистрация обязательна: https://rubyrussia.club/meetup-13
Что должно быть на самом сайте при этом?
Каком именно? Синатра?
Как в таком случае лучше сделать?
Что по производительности в этом случае? И насколько я понимаю сама ос в докере не включена, поэтому я не очень понимаю как это должно собираться для прода, мне тот же дебиан надо локально держать для сборки? Как те же настройки домена должны подтягиваться и сертификаты? Или докер чисто для дева, а в проде лучше просто настроить все скриптом а патчи через гит пулить?
Докер нужен для автоматизации (и возможности настраивать для приложения окружение отличное от окружения на самом хосте), если тебе раз поставить посмотреть то нахуй не нужно. Разве что ты хочешь именно в докере поковырятся. Система там уже есть (в образе, там есть некоторые нюансы - контейнер это не полная виртальная машина, без дополнительной хуйни от может запуститься только на линуксе, но это в общем не важно). Сертификаты/настройки или зашиваются в образ (image) - берешь какой-то за основу и делаешь собственный добавляя туда все нужное тебе гавно. Или подтягиваются из какой-то директории которая доступна и из контейнера и на хосте (в докере это volume называют).
если ты деплоишь в докере без к8с или подобного, можно попробовать так это не бест практисы ни разу
- описать systemd service, который будет отвечать за твой контейнер, чтобы логи транслировались туда + был перезапуск и прочее
- конфиги хранить не в докере, типа, либо ты вставляешь конфиги при билде имеджа и они у тебя лежат в куче имеджей, что не безопасно, либо ты их хранишь на хосте где у тебя запущен контейнер, но тогда тебе нужен какой-то баш скрипт чтобы передавать их в контейнер, вообще я бы тут хранил всё в env
> Что по производительности в этом случае?
у докера оверхед почти нулевой на линуксе, забей
> И насколько я понимаю сама ос в докере не включена
включена, если у тебя докер типа
FROM ruby-2.6-alpine
WORKDIR /srv/app
RUN cp Gemfile Gemfile.lock /srv/app/
...
ENTRYPOINT bundle exec rails s
то каждая строчка это типа докер имедж и каждая следующая включает в себя предыдущее и весь имедж это ОС + твой апп и так далее
для прода можешь замутить отдельный докерфайл для оптимизации, то есть отнять гемы группы development, test, не брать ассеты, они же должны быть на каком-то s3
> Как те же настройки домена должны подтягиваться и сертификаты?
хранить на хосте и передавать внутрь
ТЛДР
если у тебя версия руби/рельс такая, что ты можешь обойтись дефолтными зависимостями ОС, немного сторонних либ и изменения не будут частыми, деплой без докера, докер это для
а) автомасштабирования
б) легаси/специфические либы
и так далее
есть 2cpu
>ТЛДР
А если нужно что-то допиливать. Вообще с докером быстрее все настроить и пердолить обновления.
А k8s(есть же лайтовые варианты вроде k3s) еще проще, когда все настроено.
Рекомендуют вот это, но я не пробовал http://dokku.com
А докер-конфиг через что деплоить?
Я вот пишу cap production deploy и прод обновляется, с докером же та же херня будет, только плюс пердолить скрипт для контейнера?
Капистрано такая параша. Ее настраивать - дикий пердолинг. Но кто-то использует ее с докером.
Не знаю зачем тебе докер конфиг, я его не использовал.
Если в крадце:
Ты делаешь docker build из dockerfile
Пушишь его в repository(это можно автоматизировать, но мне было лень, чтобы после пуша на гитхаб оно само билдило image)
И там где хочешь поднимать просто делаешь docker-compose up подкинув .env
если без CI/CD, то можешь погуглить "deploy with docker-compose", типа, ты запустишь со своего компа docker-compose команды указав HOST переменную и он их выполнит где надо
Давно не юзаем (про свою тиму говорю, может кому и норм)
Ну я к тому что много гемора
Есть ли разница между Class.new
И
Созданием хука included, который так же инициализирует класс и хранит инициализованные объекты в массиве, которые мы потом можем использовать?
По идее это избавляет от постоянной инициализации и не расходует память, как Class.new, верно?
>хранит инициализованные объекты в массиве, которые мы потом можем использовать?
Чево блять? Это типа пародия на синглтон, только без сингл?
>избавляет от постоянной инициализации и не расходует память
Зачем тебе избавляться от инициализации и с чего ты взял, что Class.new "расходует память"?
Слегка оффтоп: по-моему первый спикер говорил в самом начале, что "питание на ядра процессора подается по очереди". Нахуя так?
по памяти лопнешь и работает медленно.
Что ты хочешь сделать?
Это не бред, это сумасшедший говнокод, который написан без какой-либо цели и назначения, просто потому что тебе в голову стукнула глупейшая идея уровня "Class.new расходует память", которую ты даже не попытался осмыслить или проверить, перед тем как лепить вот это. Удали пока не поздно и сделай обычный класс.
а BaseService / BaseAccount почему тогда инициализируешь?
типа, руби полностью объектный, если ты пишешь без инициализации классов, это не значит, что код, который ты переиспользуешь или там классы/числа/строки не инициализируются
я понимаю если бы ты с нуля как-то изъебнулся без объектов писать и переписал сайдкик себе и так далее
Откуда вы беретесь? Запрос в БД в 10 раз медленней чем инициализация 100 классов, оставь эти наооптимизации для других языков, напиши нормальный класс. Руби не про скорость выполнения.
Так а нахуя вим, когда можно просто поставить вим плагин под любуюу иде? Или для руби иде нет?
Там речь не про скорость, а про засерание памяти наверн
В СНГ может быть, в цивилизации Руби на плаву. И что самое няшное, нет смешных вакансий за 1к бачей как на ДЖсе и другом популярном говне, меньше залетных вкатышей и мидлы-сеньоры норм бабки получают.
Ни в одном из них нет даже полного базового функционала. Сужу по Rubymine. Vs Code давно не щупал, но, там , говорят, до сих пор плагин не просто не полностью работате, но и чудовищные ресурсы выжирает.
>А третьи используют IDE. Зачем — незнаю
Помимо более лучшего автокомплита тут все под рукой, в пару кликов можно увидеть все докеры, зайти в контейнер, открыть вкладку с базами, зайти в любую таблицу, с гитом тоже можно посмотреть другие ветки, вся история перед глазами, удобнее мержить когда все навиду. Все вот это можно и в терминале наколотить, но это дольше, в идеешке пару движений тачпаду или нажатые хоткеи и все готово, это просто удобнее. Ещё интеграция бд в проект, автокомплит SQL запросов. И конечно же проверка на косяки, все ошибки подсвечиваются и при комите переспрашивает ide.
Конечно если пользоваться только как текстовым редактором с автокомплитом, то тогда да смысла ide нет, проще взять какой-нибудь саблайм он шустрее.
Какой надо ставить pool в database.yaml?
Да, рор все еще остается популярным фреймворком
Всё это фейки HеRок, они берут с улицы и переучивают на Пайтон и ДжаваСкрипт. Рубисты не нужны, как и сам Руби.
Согласен полностью. Я как в офис пришел, программистом-рельсовиком устроиться, мне PyCharm поставили, дали в руки джангу, грят, сиди, кодируй. Оказалось, рельсы умерли уже лет пять назад, а руби и подавно. Пришлось переучиваться, взяли "джунгистом" работать, что поделать, сижу, переучиваюсь, джаваскреп, вот.
Ну представь, ты пришел работать слесарем, а тебе говорят, что слесари не нужны, и заставили переучиваться на сантехника. Реалистичная ситуация?
Я устраивался электрослесарем, мне сказали тогда, что я должен еще сантехнику чинить.
без doesn't тоже можно
https://turbo.hotwire.dev/
Сравниваю эту технологию и vue.js + rest api (на том же руби) и мне кажется что vue.js позволяет в куда более гибкий ui с реактивностью и реиспользованием компонентов. Но хз, реального опыта с turbo нету.
У меня почему-то не работало удаление каких-либо элементов по сокетам, кто-то запостил ишью на гитхабе, но нихуя непонятно, как решать. Охуенно, короче.
Охуенно, чо. Но в любом случае, я вообще не уверен что эта хуйня может в реактивность, как это умеют spa движки нынче
Просто хутемель отсылает по сокетам, вот и всё, аякс обыкновенный, реактивить можно, обмазывайся со стимулосом. Создано-пересоздано потому, что нынешний фронт представляет из себя хтонический ужас из смузитехнологий и их хлёбов.
Понял, буду чекать дальше.
Но пока первое впечатление - похоже на серебряную пулю, было уже JSF, gwt, которые соснули и никому не нужны. Генерация и магея это такое дело, хуй знает.
Смузихлебство с фрнотом и масштабируемым беком мне как-то ближе чем эта непонятная монолитная ёбань.
У DHH https://hey.com/ весь гуй так построен, можно пожмакать бесплатно на триале, на мой взгляд с отзывчивостью полный порядок.
Да, выглядит неплохо. Вопрос только что там с исходным кодом и не пришлось ли там изъябываться им чтобы сделать тривиальные для vue.js вещи.
A lot of convention over configuration might lead your ass to be configured gay-way.
Можешь sorbet попробовать, а так в руби 3 постепенно добавляют статическую типизацию.
На чем пишешь? РАБоты нет и приходится от зависти срать в треды динамиконяшных языков?
Котлен, голенг, жаба.
Руби-жс-питон-парашу приходится тоже ковырять, но каждый раз блевотный рефлекс.
>gay-way
>сказал человек, ублажающий компилятор каждый раз перед тем как приступить к написанию несущего смысловую нагрузку реального кода, вместо того, чтобы просто взять и писать этот код сразу же
Как называется эта болезнь?
Рубист?
бутстрап, tailwind, вот это все, да
Пиздец аргумент, охуеть. У вас, молодой человек, логика протекла в рантайме, следующий раз обдумывайте что говорите во время ЗБОРОЧКИ.
Ох уж эти волшебные типы, которые предотвращают ошибки бизнес-логики в рантайме. Жаль, что существуют они только в больном уме типошизиков.
Так я как раз вкатыш - хочу вкатиться на пыху, а потом пересаживаться на руби
Сами виноваты, с нежеланием растить джунов на своём конченном языке. Они в итоге вкатываются как могут, благо единственное требование для вката в элитнейший язык Руби это "просидеть на жопе 1 год бэкендером хоть на битрикс".
Не стоит, опыт на пхп не особо котируется в рельсомирке. Было время даже когда он считался негативным.
Нормальные люди получают зарплату не в валютах третьего мира, так что ничего не поменялось.
А уж расфасовка kwargs... Слишком уж динамично. Не, я понимаю, что в динамике одновременно и вся мощь языка, но могли бы кое-что и свистнуть у Crystal.
Что именно "не очень хорошо"? Все с ними заебись уже давно.
> "просидеть на жопе 1 год бэкендером хоть на битрикс"
Лол и за этот год научиться создавать инфобдоки в админке, писать компоненты лапшой и клепать шаблоны на говнокоде уровня 4 версии пхп. Если хочешь потом в рельсы, то лучше Yii он очень похож
>растить джунов на своём конченном языке
А кто-то сейчас растит джунов? Этих вкатывальщиков - как собак не резанных, кидаешь им задачи, кто вывозит - тот и растет, а спецов выделять чтобы возился с дурачками, ну это очень расточительное удовольствие, за такое еще нужно деньги брать, а не зарплату платить.
Нельзя. Все программисты вылазиют из пизды уже с опытом в кодинге.
Раньше аналогов не было. Питон использовался задротами и нердами, нода только пилилась, а пхп говно.
Лет 10 рельсы были единственный нормальным веб-фреймворком
Да и до сих пор чтобы побыстрому накидать мвп для стартапа ничего лучше для бекенда не изобрели.
Растят. В моей конторке, по крайней мере.
Весна...
ООП отсутствие компиляции(связаности) все маня-объекты с обращением всего в нул ундефинден.
Алгоритм это путь, а значит императивный.
Тобишь если писать маня-ооп на императивном то ты пишешь процедурки с линковками переменных и скрытыми полями типа аррр_приват[]
И никакое ООП нахуй не всралось с классами и множествами множеств.
Я не совсем понимаю, ты как-то невнятно излагаешь мысли.
Какая разница, даже если у тебя супер-позднее связывание как в смолтолке и нет заранее фиксированной топологии, в динамике путь все равно путь есть.
>Completed 200 OK in 360882ms (Views: 10.4ms | ActiveRecord: 37.9ms)
Как определить, на что проебалось 6 минут?
И правда, спасибо, там внутри метода прятались HTTP запросы.
ООП есть только в ерланге и эликсире. /thread
Твое "ооп", из с++, которое спизжено из симулы и которое распространенно, хуйня полная, которую подхватили и впаривают неокрепшим умам. И ты еще здесь впариваешь.
Впрочем, для тебя и смалталк окажется слишком сложный, даже не пытайся. маня.
>ООП есть только в ерланге и эликсире
Тупее еще ничего не слышал. Что-то уровня "ФП существует только на бумаге, потому что в любой программе есть стейт".
ФП есть только в брейнфаке, так как ты не гарантируешь результат компиляции и игнорирование промежуточных итогов.
тобишь вар залупа= конст 2+ конст 2 будет считать каждый раз а не в собраном виде уже вар залупа = 4
nor nand
Весна..
Нет в динамичном ООП ты орешь что ты обосрался, а мамка вытирает тебе жопу или нет если мамки нету.
Рук и ног у тебя нету ведь для вытирания жопы они не нужны.
Да. 1.0 версия вышла недавно.
>Тупее еще ничего не слышал.
Мои искренние соболезнования, чел. Земля тебе пухом. Даже не пытайся оправдаться и писать что то в ответ. За мной Алан Кей стоит и труды людей книжек object thinking и прочее.
Чел, даже не пытайся в разговор. Ты уже загнал себя в дерьмо. Ушел.
Вот бы еще за тобой аргументы стояли, а не только прочитанная и услышанная где-то шиза, которую ты принял за чистую монету и теперь высираешь тут без попытки ее хоть как-то обосновать.
Алгоритм должен выполнять то что реально и возможно, а не ну короче создали калькулятор и 2+2не гарантируем будет ли выполнено или нет, может там оператор + пошел на обед
Если что модель акторов полна по Тьюрингу, держу в курсе.
Коммерчески - пока нет. Если нужны статически типированные руби, то норм штука, я тыкаю понемногу.
Правда, хелловорлд в Lucky так и не смог скомпилировать, т. к. макака и там что-то с постгресом надо ебаться, но это пройдёт надеюсь
https://crystal-lang.org/reference/getting_started/ - синтаксис
https://github.com/crystal-lang/crystal/wiki - ещё немного про синтаксис, плюс всякое техническое про компилятор
https://github.com/veelenga/awesome-crystal - куча библиотек
https://tourmaline.dev/ - фреймворк для клепания телеграм-ботов, очень удобный (хоть и поломанный немножко последнее время)
Если кто тоже увлекается - создайте тред, что ли а то я нуб, не рискну
Да тут больше фишка в том что это дело компилируется и работает шустро почти как C этакай Golang с синтаксисом Ruby
Кто-нибудь адоптит сорбет? Выглядит как хуета для тех, кто не любит писать тесты или нанимает сотни макак, чтоб хоть как-то их контролировать.
А с чего умирать-то?
Алсо, думаю что это специфичная хутка, каким-нибудь сложным проектам подойдет, но для остальных 99% это будет оверинжиниринг.
Юзают все, и это набор библиотек, бери любую по требованию и юзай без задней мысли. Без do и result монад я вообще не понимаю, как люди обходились в древние времена.
Ну хуй знает, отклонил несколько офферов 320-350, сейчас в идеале выйти на 440, минимум - 380
просто возьми кристал, все эти руби-потуги в строгую типизацию просто кал
Шизик, ты?
Ну во-первых, кристал не для продакшна - это точно, во-вторых, я не очень верю в пользу статической типизации, просто хочется более удобную прибуду для валидации и преобразования всяких параметров.
Все правильно делаешь. Но я пока не нашёл хорошую удаленку чтобы и
- продукт, а не атусорс
- не стартап
- востребованный на рынке
- $$$
- без переезда
- без если с таймзонами
- без гугл-like собеса
Дело времени, офкорс. Но и на наших тоже смотрю, если продукт пиздатый
- contract, а не job permit
Вот ещё, ну ты понял, рано или поздно так и будет, ангельский в порядке
Ну вот первых проф скилл же растёт, а если не растёт то нахуй так жить?
Во вторых доллар жи
В третьих удаленка и ковид всех уравнивает в сторону увеличения (для нас) и локальным галерам и наебизнесам все сложней конкурировать
6+ лет (уже ближе к 7) ну, это с самого начала, с первой работы стажером/Intern/Junior
мимо долларовый удалёнщик $6k в месяц после налогов из предыдущих тредов
ну во первых, если у тебя простейший круд и бзенслогика по преборазованию записей в постгре, то кристал с этим справится даже в проде
во-вторых там есть тайп инференс и писать большинство типов просто не нужно
но вобще он тоже кал, соглы
Если легаси-проект, то, скорее всего, хватит Jquery + немного вникнуть в синтаксис coffeescript. Если более-менее новье, то лучше ваниллу подучить чутка. В целом - сильно много не надо.
MyModule.constants.find { |sym| MyModule.const_get(sym) == my_var }.to_s
irb(main):004:0> ::ZALUPA.object_id
=> 77620
irb(main):005:0> z = ::ZALUPA
=> "hello"
irb(main):006:0> z.object_id
=> 77620
Я не он, но во всех базовых туториалах и учебниках по ruby это есть чуть ли не в первой главе, ну.
Все мои последние проекты - это перекот с рубей (рельсов, как правило) на голенг/жабу/котлен.
Нахуя вкатываться в мертвое говно?
Ну по такой логике, все мои последние проекты - это рельсы, так что зачем вкатываться в неиспользуемое мертвое говно, вроде жабы, го или котлина? Оправдывайся.
Для неумелых и страдающих афантазией как ты, конечно, все будет как самокритика. Иди крудошлепствуй, дурачок.
свифт похож на руби блоками.
Но к сожалению о рубях можно только мечтать. Даже простой скрипт пишу на хуевом питоне из за либы telethon. Приходится кушать говно как всегда.
Жалко руби никогда не изучу. А может и к счастью, динамического никогда не любил. Даже хз как там у вас в проектах все. и 3.0 не особо спасает как я понял.
Одновременно верны обе вещи - это сабмодули топ левел проекта(этот проект о них знает и это выражается на уровне команд для менеджмента сабмодулей, наличия .gitmodules файла и прочего) и в то же самое время они являются отдельными проектами и ничего не знают о топ левел проекте.
Весь ios team и несколько людей с высоких позиций. Плюс кто-то из rails core team. што такои там dhh сделаль?
Ясно, запретили в рабочих чатах упездываться про "политику" и все самые яростные SJW ушли.
This is the rule that’s gotten the most attention so far. Basecamp co-founders Jason Fried and David Heinemeier Hansson are banning conversations about social issues and politics on Basecamp’s official workplace account. Their reasoning is that such conversations are a) too distracting from work, b) unconnected to work, and c) too stressful and conflict-laden. “You shouldn’t have to wonder if staying out of it means you’re complicit, or wading into it means you’re a target,” writes Fried. An addendum post from Hansson notes that Basecamp will still engage in conversations about political topics deemed core to their business, such as “antitrust, privacy, employee surveillance.”
The employee take: The founders of Basecamp assume that conversations about politics and society are unrelated to work. It’s a false assumption. Politics and societal issues shape the world of work in myriad ways, including both the products that Basecamp builds and the experiences that people have while working there. We know, for example, that people’s racial and gendered biases get built into algorithms; that programming terms can reflect racist histories; that conversations about transgender and LGBTQ rights can apply to something as concrete as company policy surrounding pronouns; and that the #MeToo movement prompted a much-needed conversation about how sexism and sexual harassment are rampant in many workplaces.
> Весь ios team
Кто бы мог подумать что для гей-оси работают в основном геи, трансы, блмщики и всё вот это или точнее кто их поддерживает и занимаются хуйней вместо работы, как жаль что сами рельсы тоже не от японцев, а то как-то зайдя на репо увидел "main" вместо запрещенного слова, как блять капитализм вылился в настоящий 1984, а не коммунизм, нихера не понимаю.
А капитализм в коммунизм и выливается у них к сожалению. Все эти блм клоуны и шизики трансы, по крайней мере их thought leaders в академии и около являются "тренированными марксистами". Больно видеть как гнойная identity politics и психически больные люди разрушают в частности американское общество и то что создали продуктивные люди.
бамп
нормально там они барагозят
Он трампист.
Наличием каноничного и правильного ООП.
*больше
import import
import (
import )
import .
import os
import print
import alphabet
import sky
import allah
print(ну(а(ты().как().думаешь(?))))
В руби намного пизже синтаксис, чище выглядит код, лучше выдержан ООП-стиль без шизосмеси методчейнов и функций от функций. От двоеточий после def и if, которые абсолютно никакой информации не несут ни человеку, ни интерпретатору, меня пиздец как коробит. Нормальной интерполяции строк не завезли, каждый чих надо импортировать, на базовых классах (особенно коллекциях) нет половины методов, которые в руби искаропки. Ну и итераторы в руби лучше, чем for и while, если проникнешься.
Потому что руби это язык программирования который делает программиста счастливым
В какой именно момент руби, будучи динамической парашей, может сделать программиста счастливым?
Варианты:
- Во время отладки
- Во время написания тестов
- Во время чтения очередного залупного обновление очередного никому не нужного нахуй convention over configuration правила.
Сосите хуй, рубисты.
>В какой именно момент руби, будучи динамической парашей, может сделать программиста счастливым?
В момент, когда ты пишешь код, а не ублажаешь анальный конпелятор из-за религиозной веры в манятипы.
>Нормальной интерполяции строк не завезли
В версии 3.6 или 3.7 теперь есть интерполяция, а так да питон с виду лаконичный и простой, но как-то много мелочей которые добавляют хуевости в язык, плюс не хватает синтаксических фишек которые есть в руби
>По сравнению с другими фреймворками Ruby on Rails выбирают много разработчиков. Но на фоне популярных CMS это сообщество выглядит очень скромно. Для сравнения, разработчики «1С-Битрикс» в 11 раз больше.
Страшно представить...
>Для сравнения, разработчики «1С-Битрикс» в 11 раз больше.
Представил ангар, наполненный гигантами, переписывающими гитхаб с рэйлз на битрикс.
Да вполне норм, имхо, учитывая что крупных компаний, которые могут позволить себе массово набирать рубистов-джунов и растить для себя у нас нет вполне популярнен в своей нише. Рельсы даже в в госконторы пробиваются иногда..
Кто устроился на джуна в этом году? А то тут как будто перепись матёрых рубистов, которые в валютах получают, мне до такого ещё далеко. Решил с системного администрирования начать вкалывать под рельсы, либо дожимать и идти в DevOps, на пороге выбора, поделитесь мыслям, нужно решить в пользу одного или другого.
Ну а ты сам как думаешь? Много устроилось?
Я после полгода пыха перекатился в этом году. На счёт мыслей, просто попробуй и то и другое, тогда окончательно определишься, одно другое дополняет, что разработчику нужно уметь немного девопсить, что девопсу будет полезно знать какой нибудь скриптовый язык. Можно даже попробовать поработать с чем-то из них, если не понравится, то никто не заставляет жениться на всю жизнь. Я с php начал потому что знаком был немного, а вот как чуток освоился и поглядел какие вакансии говно на нем, сплошные студии кузницы говносайтов, либо недотырпрайз на симфони, так и потихоньку перекатился. А до этого вообще какой хуйней только не занимался и на заводе гайки крутил и проектировал инженерные системы.
На руби другие задачи решают? Те же самые круды для недотырпрайза, один в один. Когда нужно серьезное ноухау сделать пишут не на скриптухе, потом уже на пыхоплеяде дописывают процессинг для бабла.
На пхп другие задачи решают, на одну продуктовую компанию будет десяток студий, каждый раз когда мониторить рынок просматриваешь сотни таких вакансий, а в этих студиях все делается наотъебись, поскольку клепаешь по сайту в день я утрирую, но раз в недели 2 - месяц новый проект, веслаешь и фронт и бек и девопс, пишешь со сроком вчера и постоянно вносятся правки, это качество кода переноситься и в продуктовую разработку, довелось это даже лицезреть пару проектов, я скорее из-за этого ушел. А если перекатываться в симфони, где код почище, пишут тесты и бывают интересные проекты, то на мой взгляд жаба и спринг интереснее будет, особенно по зарплате, php с каждой версией больше становится похож на джаву.
На руби чаще всего продуктовые компании, даже если по проектам смотреть, то на рельсах больше интересных проектов, чем в пхп на ларавеле (советую посравнивать на том же хх.ру) , что отражается на культуре кода и разработки в целом, благо есть с чем сравнить. Ну и плюс ко всему на руби синтаксис лаконичный и сахарный, гемы на все случаи жизни есть, да и много полезных фишек у самого языка.
А так да, одни круды, генерация json'ок на фронт и формы мы вам перезвоним.
Это типо мотивация для вката?
Накрудошлёпили хуиты на пике хайпа, а теперь пытаются зарплатами завлечь, потому что никто не хочет работать на мёртвой залупе
Да вроде тут ни пыха, ни питон, ни goвно, ни жава не упоминаются, да и платят им не так много в сравнении с богоподобным Ruby. Кого там, индусов на этот зоопарк клоунский завлекать? О ком речь идет у тебя?
Слышал что в руби нет смысла соваться, если нет хотя бы 1-2 года разработки на другом языке, так как джуном стать на нем нереально, это правда и лучше выбрать какой-то другой язык для вката?
>Да вроде тут ни пыха, ни питон, ни goвно, ни жава не упоминаются
Кто о чём, а вшивый о бане.
>да и платят им не так много в сравнении с богоподобным Ruby
Пруфы в студию.
>О ком речь идет у тебя?
О руби речь у меня, не виляй.
Осторожнее, ты можешь обидеть нежных рельсодрочеров в этом итт треде. Они еще не проснулись и не открыли для себя ни spa, ни data first, ни нормальные ЯП.
>spa
Не нужно, есть hotwire-rails.
>нормальные ЯП.
Не совсем понимаю тебя. Рельсоводы и пишут как раз таки на руби.
>data first
Это не актуально, просто не нужно, кек.
>Это не актуально, просто не нужно, кек.
Как сказал анон то ли в голанг, то ли в си, треде, "Ненуждоиды есть первый признак загнивания языка".
Раз уж пришел открывать людям глаза, так может пояснишь, что это за "data first"-то такой?
>как раз таки на руби.
>нормальные ЯП
>2021
Чем может руби удивить в 2к21, когда есть шарпцы, котлен, скалка, раст?
Правильно, только глубоким горловым миньетом. Только им.
>шарпцы, котлен
Эта индуская хуйня отстаёт по выразительности от раби десятилетней давности
>скала
Многословная оверкомпликейтед параша
>раст
Байтоеб, плез
В итоге я просто копипастил код чтобы посмотреть как работает проект. Был больше интересен результат.
При этом мне стало интересно рисовать векторную хуйню. И вот я потыкал tailwind + немного обновил внешний вид одного старого сайтика(статического, там bumla) и мне ок.
Еще я примерно месяц назад пердолился с кубернетисом чтобы задеплоить проектик и мне тоже было ок.
Как это можно объяснить? С чем может быть связан негатив к рельсам?
Мог ли я перегореть, лол? Как это вообще возможно? У меня были попытки искать работу, но все заканчивалось тем что убирал резюме и забивал на неск месяцев. Хотя были какие-то предложения. А сейчас вообще чувстую себя тупым.
А ты зачем этим вообще занимаешься? Рельсы — это просто инструмент для молниеносного крудошлепства, если ты не планируешь вебмакакингом заниматься, то и не трогай их. В бар сходи, пиво с друзьями попей, расслабься, зачем тебе все это?
Антидепрессанты могут усугубить ситцацию и все это долго.
>>2033985
>молниеносного крудошлепства,
Возможно это имеет какое-то отношение к вопросу. Ведь если делать что-то на синатре или hanami, то там больше контроля и создается ощущение что в чем-то шаришь.
Но с другой стороны, может быть ты додик-подпивас, который кроме форм ничего не делал и по-этому написал так. Еще и свои быдло-равлечения предлагаешь.
Ясно. По съебам давай с треда, никто помогать тебе не намерен, тебе здесь не рады.
Поссал на тебя.
По идее это будет даже более годно чем hanami и тем более rails ?
Одни монструозные Rails-based CMS.
ищи конторы где просят писать нормальный код, а не крудошлепить антипатерны на рельсе, будет норм.
на рельсе, кстати, тоже можно писать почти без боли.
Либо пытать счастье во фронте
https://github.com/padrino/padrino-recipes/blob/e52c583119cb88281dc13103f10a111c0419bae6/plugins/carrierwave_plugin.rb#L7
Ну хуй знает. Динамика динамикой, а иногда смотришь и думаешь:
> Ну вот этот массив захардкожен, и меняться в рантайме там ничего не будет. Почему бы не сделать его постоянного размера?
> А в этом массиве я только инты и собираюсь хранить. Зачем мне туда что-то другое пихать? Ну пусть будет массив одного типа, мне не жалко.
> Ну вот эта куча метапрограммирования просто генерирует кучу известных мне методов. И нахуя делать это раз за разом в рантайме? Что будет хуже, если сделать это в компайлтайме?
> Так этот метод же в любом случае будет принимать только строку, я же на неё #downcase сразу же вызываю в этом методе. Ну и чо плохого будет, если я сразу помечу, что он принимает строку и возвращает строку?
И наоборот, в кристале нилчеки порой заёбывают, и код замусоривается, когда что-то может быть нилом только теоретически. Парсить JSON и подобные структуры тоже боль, там надо компилятору доказать, что ты точно-точно знаешь, в каком формате этот жсон придёт.
Но, наверное, хорошо, что заставляет немножко подумать, прежде чем шлёпать десять методов, которые потом в рантайме по пизде пойдут.
Зачем жрать на кристале, если есть го? (Зачем жрать капусту, если есть картошка?)
ActiveRecord::ConnectionNotEstablished (No connection pool for 'ActiveRecord::Base' found.):
Как вообще возможно такое, что ПУЛ отсутствует?
Судя по сорцам рельс (ActiveRecord::ConnectionAdapters::ConnectionHandler#retrieve_connection), эта ошибка возникает не когда нет возможности получить коннекшон из пула, а когда самого пула нет. Это блеать в моей голове не укладывается. Как так-то нахуй?
Ниакого ОСОБОЙ нагрузки нет - пару вкладой с рефрешем раз в 2-3 секунды и через 30-60 секунд, как правило, эта хуйня воспроизводится. Через секунд 5-10 эта хуйня пропадает и работа восстанавливается.
В mysql смторел кол-во коннекшонов - оно всегда 2-3 и до лимита оч далеко (лимит около 150).
Может есть какие-то идеи куда еще можно копнуть?
Как все же принято делать?
Пример
rails g model Membership user:references plan:references
создает t.references :user, null: false, foreign_key: true
Здесь сам по себе идет index из-за foreign_key?
--
rails g model Membership user:bigint plan: bigint
создает t.bigint :user_id
И я видел что потом добавляют
add_index :membership, [:user_id, :plan_id], unique: true
В руби вообще возможно джуном залететь? На хх полторы вакансии висит. Хочу ебошить бекенд, или мне джангу копать? Синтаксиси языка очень понравился по сравнению с питоном
Реально, если тебе нужны вакансии прям сегодня, то лучше пхп, если можешь тихонечко работая проходить собесы пару месяцев, то вполне возможно, а если живёшь в Москве или Питере, то там ещё проще. С питоном не все так гладко, там вкатывальщиков дохуя
А я думаю что маловероятно попасть джуном с улицы, нужно свои проекты попилить, набраться опыта. А Python это только Django как флагман и может ещё Flask если для web. Остальных почти не видно. Ещё Web2Py (теперь Py4Web) помню.
Этот PHP вездесущ и неубиваем. Там тоже придётся учить какой-нибудь Laravel и ещё кучу всего, но мне кажется в мире Ruby это всё органичнее (rake, rack, puma, minitest и все все все потроха которые требуются для разработки). WordPress ещё на PHP, тоже популярная вещь.
RoR конечно более всего в штатах популярен. Можно посмотреть расклады тут: https://trends.builtwith.com/websitelist/Ruby-on-Rails/Russia
Никогда не пердолился с этим, оставлял как есть. А сейчас задумался.
create_join_table :locations, :offers do |t|
# t.index [:location_id, :offer_id], unique: true
# t.index [:offer_id, :location_id], unique: true
end
Вот допустим если у меня будет страница Location и на ней Offers этого Location
И в то же время будет Offer со списком Locations.
По идее надо выбирать первый вариант? Оба варианта выбирать плохо?
Все же потыкал роду. Кажется интереснее синатры. Но у меня такое ощущение что все эти проекты вымрут. А как наверно лампово было на них что-то делать лет 7 назад :'(
Первый вариант
> Sequel
https://github.com/jeremyevans/roda-sequel-stack/blob/master/models.rb
Как-то слишком много пердолинга
А меня больше забавляет тот факт, что с этим там никто не борется.
То есть нет борцов против них. Они уничтожают, потому что им позволяют мне кажется это еще более пиздецовее
add_index :votes, [:votable_id, :votable_type]
add_index :votes, [:user_id, :votable_id, :votable_type], unique: true
Есть
User
Associateship(возможно плохое название)
Provider
По и идее нужно чтобы в Provider был главный юзер который сможет приглашать других пользователей
В итоге у меня есть несколько статусов типа
invited
joined
declined
И дальше
has_many :active_members/pending_member/passive_member,
-> { where("associateships.state = ?", joined/invited/declined) },
through: :associateships,
source: :provider
Какой здесь должен быть source? По идее везде provider?
--
Как мне сделать главного юзера который сможет приглашать других?
Создать какой-нибудь join где хранить главных юзеров(которые могут приглашать и редактировать)
Так же я накидал моделей типа Role, Right, но пока не дошел до них
Есть
User
Associateship(возможно плохое название)
Provider
По и идее нужно чтобы в Provider был главный юзер который сможет приглашать других пользователей
В итоге у меня есть несколько статусов типа
invited
joined
declined
И дальше
has_many :active_members/pending_member/passive_member,
-> { where("associateships.state = ?", joined/invited/declined) },
through: :associateships,
source: :provider
Какой здесь должен быть source? По идее везде provider?
--
Как мне сделать главного юзера который сможет приглашать других?
Создать какой-нибудь join где хранить главных юзеров(которые могут приглашать и редактировать)
Так же я накидал моделей типа Role, Right, но пока не дошел до них
Если я хочу вынести все константы в отдельный model.rb
Как сделать его require до иницализации других моделей?
--
Есть смысл все делать через константы или можно сразу прописывать в enum? (Вторая секция на скрине) Как я понял что если эти значения будут использоваться только для select в форме, то можно без констант, а если я планирую использовать эти значения где-то в других файлах, то удобнее с ними.
Братишка, половина Омерики против этого. Это в "синих" штатах в основном творится ультрапиздец - трансы, ниггеры и прочие меньшинства кэнселят всех, захватили универы, где преподают теорию расы и гендерную науку, ведут пропаганду среди детишек "если ты мальчик но поиграл с куклой тебя надо сажать на гормоны и потом отрезать тебе хуй и вырезать дыру которая будет твоей пусечкой, внутри которой будут расти волосы и сочиться гной и которую тебе придется расширять(dilation procedure) каждый день до конца жизни чтобы оно не заросло". Ментально дефективные гниды(риск суицида под 40%) надели халаты и захватили дурдом.
А вот "красные" штаты как то получше выглядят и там этой гадкой шизе противостоят. В целом я люблю Омерику и верю что они вывезут в результате.
>Есть смысл все делать через константы или можно сразу прописывать в enum?
Зачем константы? В модели же объявляешь enum, к нему можно получить доступ из метакласса.
Если уж заморачиваться с отдельной сущностью - https://naturaily.com/blog/ruby-on-rails-enum в конце описан способ вынести работу со статусом в отдельный класс, но я не вижу особо смысла в этом, честно говоря.
>Если я хочу вынести все константы в отдельный model.rb
Зачем их выносить в отдельный файл? Если речь идет о чем-то вроде Order::States, то и держи константу там, где она используется, то есть в модели Order.
>Есть смысл все делать через константы или можно сразу прописывать в enum?
Рельсовый enum - это ужасный костыльный контр-интуитивный антипаттерн. Сделай обычный контейнер для констант через класс/структ и держи все там. Вместо ебли с волшебными переменными и волшебными скоупами, ты будешь писать обычный руби код уровня Order.where(state: Order::States.completed) или if order.state == Order::States.completed и тебе не придется гадать, во что оно там превращается под капотом, и куда писать сырое значение, а куда волшебное название из енума. Скоупы и сокращенные записи для этого всего можно сделать элементарно.
Как-то давно так делал, но не нравилось что в бд хранятся 0 1 2 вместо значений которые сразу дают какое-то представление
>Сделай обычный контейнер для констант через класс/структ и держи все там
Вот так и хотел сделать. На моем скрине самое нижнее где unit.
Вчера почему-то не работало. Сейчас кажется ок.
Как это называется, где это в документации? Вроде бы патерн матчинг, но не нахожу в доках.
Да. В ruby это array decomposition. Хотел что-то такое, если вместо массива мой объект:
b, c = my_obj.
Но не понял пока что должно быть у obj.
Зато так можно:
def my_obj.to_a; [1, 2]; end
irb(main):031:0> a, b = *my_obj
=> [1, 2]
Хотя этой хуйня.
Докладчики и доклады:
- Ruby 3.0 Ractors. Михаил Дмитриев (57 votes)
- Rails X. Vladimir Dementyev (56 votes)
- Сага о сагах. Антон Давыдов (50 votes)
- Development-driven testing. Simon Perepelitsa (43 votes)
- Full-stack monitoring. Dmitry Salahutdinov (41 votes)
- Property based testing. Boris Beginin (34 votes)
- Readable code, complexity and you. Grigory Petrov (33 votes)
- Software Engineering vs Software development. Юлиан Покровский (27 votes)
5 июня 10:00 - 19:00
Стрим: будет
Конгрессный центр ПетроКонгресс (Санкт-Петербург, Лодейнопольская ул., 5)
Регистрация: https://kommunity.com/saintpruby/events/summer-saint-p-rubyconf-2021-dbba253c
Как на двоще бывают рандомные имена
Или пикрил как у телеги
>>2055788
Посмотрел. В телеге эти картинки прописаны вот так
https://contest.com/css/contest-zoo.css?7
https://github.com/faker-ruby/faker/blob/master/doc/default/avatar.md
Блять, там только роботы. Это не то.
https://github.com/identicons/hui.png
https://github.com/identicons/pizda.png
Они вообще не против этого?
Просто тыкал. Кто-нибудь использует ebs? И вообще, куда вы пердолите свои никчемные высеры поделия?
Twgwfwv gsvs
Ну берут и делают, в чем конкретно вопрос? Есть элементы, есть позиции у этих элементов, все укладывается в обычную запись в базе.
Ты путаешь лейаут приложения(для которого надо писать yield и который предопределен) и лейаут кастомной страницы-шаблона. Кастомная страница в твоем описании - это абсолютно отдельная сущность и рендерится она отдельно, обычно во фрейме. И там ты уже берешь эту страницу, смотришь какие в нее понапихали элементы и где их надо рендерить и в каком виде. По сути то же самое, что и рендерить например таблицу или модал, только более замудренное.
>pic
Понятия не имею что это должно означать.
В любом случае, тебе стоит внятнее формулировать вопрос и хотя бы какой-то пример юзкейса привести. Вариантов масса. Плюс - не факт, что тебе действительно на самом деле нужны такие костыли.
Ну это не для какого-то проекта, а просто вопрос возник, как такое в принципе делают)
И еще как вообще правильно такое делать? Или теперь принятно использовать hotwire. Я видел что там просто это сделать(обновить форму и показать шибки без перезагрузки страницы)
Или можно просто рендерить :new, layout: false и заменять форму
Есть _post.json.jbuilder
respond_to
format.js { render json: @post }
json.extract! post, :id,
Оно возвращает все атрибуты
Хотя это я додик
Если надо засабмитить форму через js(например, используя stimulus и ujs) нужно ли оставлять на форме local: false или делать "submit -> form#submitForm"
submitForm() {
Rails.fire(this.formTarget, 'submit')
}
Просто оно странно работает. Я уже попытался экспериментировать, делая setTimeout. Оно просто не сабмитит форму через Rails.fire
--
Если оставить local: fase и ajax:success->form#onPostSuccess ajax:error->form#onPostError, то оно работает, но мне нужно это все сделать через js
Нет чего-то интересного на GitHub — пришли примеры сложного или красивого кода из рабочих проектов
```
Какие же марсиане помойка просто.
Анон несколько тредов назад рассказывал что в инстамаркете переработки и дрочево на алгоритмы.
Но это было давно и они продались. Сходи, пообщайся, ничего не потеряешь.
Вот если брать пример форума двоща
board (по сути это то же самое что и category или tag)
posts
Можно отображать все через board#show и в нем @posts
А можно через posts#index и там смотреть на params
Какой их этих способов предпочтительнее
>Есть гем который генерирует имя и картинку?
Недавно видел что-то похожее
http://planetruby.github.io/gems/pixel/05-pixelart-characters
В роуте для такого кейса у тебя будут вложенные ресурсы
resources :boards do
__resources :posts
end
это сгенерирует REST роуты типа boards/{borad_id}/posts/{post_id}.
А если добавлять комментарии к постам например, получится /boards/board_id/posts/post_id/comments
Это неудобно же
Вопрос был не в этом. Ну да ладно.
Не первый раз замечаю что в треде анона(подозреваю что он подпивас-вкатывальщик), который дает такого рода ответы.
>>2064037
А если сделать так и еще начать добавлять туда member do, то все это выглядит не красиво
resources :boards, path: ""', only: [:show, :create] do
resources :posts, path: "", only: [:show, :new, :create]
end
Если тебе не нужны ни поиск, ни пагинация по постам, и ты всегда хочешь просто получать все до единого посты борды, то /boards/:id/posts. Если же поиск и пагинация нужны, то либо POST /posts/search(если делаешь нормальное API, с которым надо работать не только твоему же рельсо серверу, потому что в таком случае передавать параметры запроса в квери залупе - это моветон), либо GET /posts и там дрочи квери.
__resources :books
Category.new(name: "hui")
localhost:3000/hui
@category = Category.find_by(name: params[:category_id])
@new_book = @category.books.new
render form, book: @new_book
form_with model: [:category, book]
=> form action="/hui"
Обычно же делается [@category, @category.new], а символы для неймспейсов. Как оно работает?
Please use symbols for polymorphic route arguments.
Спасибо. А то уже не выносимо делать то, для чего не предназначен или просто черт ленивый и разбираться не хочу, я уже сам запутался
>А если сделать так и еще начать добавлять туда member do, то все это выглядит не красиво
Выглядит так себе, генерирует хер пойми что, сам уже склоняюсь к тому, что лучше руками прописывать роуты, типа как здесь:
https://github.com/openstreetmap/openstreetmap-website/blob/master/config/routes.rb
Если делать <%= render @post.comments %>, то оно ругается что в _comment поле comment nil, хотя еще ни одной записи добавлено не было.
Если сделать
@post.comments each do comment
__if comment.persisted
____render 'comments/comment', comment: comment
Что-то тут не так? Оно ведь должно работать без проверки persisted
fix *Если сделать так, то оно работает
Тебе devops или жс тред. Ты заворачиваешь оба приложения в имаджи. И там и там кидаешь ENV в .env файл. Ты явно не тыкал докер.
>на тестовом стенде
Что такое тестовый стенд.
Ты думаешь здесь экстрасенсы? А если это все пердолить в куб, то это совсем другая история.
Так что ты додик.
У тебя не должно nil прилетать во вьюхи вместо пустого массива. Попробуй в консоли добраться до comments через промежуточную модель. Т.е. у тебя должна быть быть промежуточная_модель.comments
> промежуточную модель.
Post.find(id).comments возвращает пустой массив.
Если делать вот так, то работает. Там просто комментарии еще могут быть и на самих комментариях.
render @post.comments.where(commentable: @post|@comment)
А еще, то что на пике это же ок?
post - has_many_comments
comments - has_many_comments
comments сделаны как polymorphic
В итоге если сделать post.comments.count, то вернет только комментарии как бы первого уровня. А ответы на комментарии не посчитает.
Я сначала хотел просто добавить в комментарии parent_id, но забыл. Это хорошая идея или надо как-то по-другому?
Типа у всех комментов commentable будет @post
А parent_id и какой-нибудь depth только для нестинга, да?
Есть wysiswyg редактор у которого есть метод возвращающий text.
Тк в бд хранится html, я сделал виртуальный аттрибут(rendered) и пытался сделать before_validation gsub чтобы убрать \n, но оно не работает как бы я ни пытался.
А если сделать кастомный валидатор, то работает.
Что тут можно сделать? В то же время тот атрибут куда записывается html может быть пустым.
Симдянов из свежего. Путь Ruby актуальна, она более на реальную практику ориентирована. Хартл конечно же. Ну и Ruby. Объектно-ориентированное проектирование.
t.references :user, null: false, foreign_key: true
t.text :body, null: false
t.references :parent, index: true, foreign_key: {to_table: :comments} <---- вот это выглядит старнно
t.references :commentable, polymorphic: true, null: false
comment.rb
+ has_many :replies, class_name: "Comment", inverse_of: 'parent' (не знаю насчет inverse здесь)
Хочу чтобы было @comment.replies через parent_id.
Отписывал выше - у меня у всех комментариев commentable это @post.
да, можно сделать через scope
Достаточно было прописать ,foreign_key: 'parent_id'
А есть ли большая разница между
t.references :parent, index: true, foreign_key: {to_table: :comments}
и
t.references :parent, index: true
Я не покупал курс, просто смотрел старый слитый курс, мог сказать что это отличный курс, но только не для новичка, т.е. явно должны быть пара пет-прожектов. Там основная фишка в том что дают понимание как работают в команде, т.е. гит, трекеры и т.д. Если вкатышь, то думаю этоит курс не самая лучшая идея, там уже предполагается что чел понимает руби/рельсы.
• Оптимизация Rails API-приложений. 5 простых шагов, чтобы добиться успеха. Артур Корочанский, Ruby internal tool developer, Level.Travel
• Рисуем Vue.js вместе с Rails. Иван Соловьев, Teamlead, Evrone
(Завтра) 24 июня 19:00–21:30
Регистрация: https://railsclub.timepad.ru/event/1561940/
Спасибо за ответ, я тоже скачал слитый курс, точнее два курса (ruby on rails с нуля и профессиональный курс, а сейчас они эти два курса в один объеденили), ты видимо смотрел только профессиональный курс, я пока смотрю базовый - все разжевывают с нуля, вроде понятно, как дальше будет не знаю, курс через месяц уже стартует надеюсь подтяну за этот месяц что непонятно.
Thinknetica пожалуй лучший курс по RoR, из русскоязычных.
Но лучше идти туда после прочтения Симдянова (Ruby) и Хартла (Rails) - это сильно ускорит прохождение курса (первые два блока) и сэкономит деньги на обучении, всего месяц на книги потратишь
>>2077544
Слитый вряд ли хорошо подойдет для того кто идет в айти. Если ты с джанги, ларавеля (добавь в список по вкусу) перекатываешься - может быть как роадмап проканает. На деле у них идеальная антипиратская система - 80% выхлопа в домашках которые тебе будут с высокой вероятностью возвращать с комментариями к твоим пулл реквестам.
я инженер, перекатываюсь из solidworks )))
>80% выхлопа в домашках которые тебе будут с высокой вероятностью возвращать с комментариями к твоим пулл реквестам.
ради этого и пошел, а курсик сейчас отсматриваю ,чтобы потом попроще было (у них, насколько я понял, очень интенсивная программа)
>>2078830
Большое спасибо за ответ.
Bamp
f.hidden_field :parent_id, value: "..."
Мне нужно создавать comments, replies. Изначально хотел делать 1 форму, но кажется все же лучше 2 отдельные.
Я хотел проверять parent_id и в ответ кидать форму с ошибками через json
Какая-то лютая унылость вышла. Один спикер выступал 15 минут, второй - 20. Оба в своей тематике откровенно плавают. Организаторы, как выяснилось, даже не смотрят предварительно доклады спикеров (они идут в записи) и не знают сколько они длятся. Рукалицо.
Предыдущие евроновские митапы были значительно лучше, в этот раз что-то пошло не так.
ОНЛАЙН
• Ruby, нейрофизиология и читаемый код. Петров Григорий, DevRel в Evrone
• Service Object в Rails. Олег Федоткин, Head of PaaS СберМаркет
• Чем другие фреймворки лучше Rails. Кирилл Мокевнин, основатель Hexlet
ЗАВТРА 29 июня в 18:00
Регистрация: https://sbermarket.timepad.ru/event/1660166/
там wysiwyg редактор и он сразу вставляет <img src="base64.."/>
const upload = new DirectUpload("base64", "http://localhost:3000/rails/active_storage/direct_uploads");
upload.create((err, blob) => {
console(err/blob) <- тут ничего не происходит вообще})
Мидл 220-300
>Как посчитать nested comments?
Никак.
> parent_id
Не поможет.
Если комментарии многоуровневые (пост > ответ -> ответ на ответ -> ответ на ответ на ответ) то это решается стандартными средствами в один проход.
Решений несколько:
1 хранить путь от поста к текущему комментарию в строке «parent_id/parent_id_parent_id/…) и для получения всей ветки where path like
2 использовать CTE с рекурсивным запросом, это называется транзитивное замыкание графа так и гуглиться
3 использовать гем, который совершит обход дерева за тебя путём нескольких запросов к БД со стороны приложения, я такой как-то видел, traversable вроде называется, генерит кучу запросов конечно же
Если выставлять на всех комментариях commentable: @post, то можно считать.
Если на каждом комментарии прописывать parent_id, то можно получать ветки where(commentable: post, parent: comment)
Первый уровень комментариев(к самому посту будет с parent: nil) Можно их подгружать сразу и потом при необходимости грузить ответы на комментарии.
На сосаке сразу грузятся все комментарии и потом жсом фильтруются и отрисовываются.
> Если выставлять на всех комментариях commentable: @post, то можно считать.
Только к посту, но не к ветке.
> Если на каждом комментарии прописывать parent_id, то можно получать ветки where(commentable: post, parent: comment)
И для каждой ветки (каждого комментария, которыц является веткой, то есть присутствует в других комментариях в поле parent_id) по запросу
> Можно их подгружать сразу и потом при необходимости грузить ответы на комментарии.
Ага и каждую ветку придётся грузить отдельным запросом
>Ага и каждую ветку придётся грузить отдельным запросом
Это даже плюс(хотя актуально только если там ооочень много ответов).
Да конечно плюс ага.
Пост
Коммент 1
Коммент 1
Коммент 1
Коммент 1
Коммент 2
Коммент 3
Коммент 2
Коммент 3
Коммент 4
Коммент 1
Удачи тебе вот такой тред по одной ветке грузить без подветок,охуеешь
Сука.
Пост
Коммент1
Коммент1_коммент1
Коммент1_коммент1_коммент1
Коммент1_коммент1_коммент2
Коммент1_коммент1_коммент2_коммент1
Коммент1_коммент1_коммент2_коммент2
Коммент1_коммент2
Коммент1_коммент3
Коммент1_коммент3_коммент1
Коммент2
Коммент3
Коммент4
Думаю, что его проблема в том, что он капчует из Таиланда/Индонезии (судя по тому, что у него уже ночь там)
>>2083950
Думаю что ты шиз.
Особенно после того что написал тут
>parent_id/parent_id_parent_id/…
> совершит обход дерева за тебя путём нескольких запросов к БД со стороны ....генерит кучу запросов конечно же
Поэтому и лучше все грузить по отдельности.
Блять это то же самое что и
= post.comments.where(parent_id: nil) do |comment|
__=render comment
Это первые комментарии как на youtube
К ним можно грузить ответы
has_many :replies, class_name: "Comment", inverse_of: 'parent', foreign_key: 'parent_id'
и
"comments/_comment.html.erb"
comment.replies.each do |reply|
__= render comment, comment: reply
>>2083950
Думаю что ты шиз.
Особенно после того что написал тут
>parent_id/parent_id_parent_id/…
> совершит обход дерева за тебя путём нескольких запросов к БД со стороны ....генерит кучу запросов конечно же
Поэтому и лучше все грузить по отдельности.
Блять это то же самое что и
= post.comments.where(parent_id: nil) do |comment|
__=render comment
Это первые комментарии как на youtube
К ним можно грузить ответы
has_many :replies, class_name: "Comment", inverse_of: 'parent', foreign_key: 'parent_id'
и
"comments/_comment.html.erb"
comment.replies.each do |reply|
__= render comment, comment: reply
мб потому что ты Projects во множественном числе прописал
Оказалось это был ./bin/webpack-dev-server
Кстати, как можно ускорить билд, когда используешь tailwind.
Заметил что при редактировании js файлов(контроллеров stimulus), он быстро все компилит.
И еще такая проблема. Я подсел на firefox и он тоже со временем начинает пожирать память, если часто обновлять страницу
>Оказалось это был ./bin/webpack-dev-server
Тут не подскажу - тупо не использую.
>Кстати, как можно ускорить билд, когда используешь tailwind.
>Заметил что при редактировании js файлов(контроллеров stimulus), он быстро все компилит.
ХЗ, опять же - не работал с tailwind. Вроде у них свои фишки с минификацией.
>И еще такая проблема. Я подсел на firefox и он тоже со временем начинает пожирать память, если часто обновлять страницу
Пользуюсь исключительно FF - не наблюдал.
>Это все неэффективно в плане количества запросов. Связано это с теп, что иерархическая ака древовидная ака графовая структура хранится в «плоской» sql базе в виде таблиц с записями.
Почему бы не хранить тред в виде вложенных массивов? Вроде бы монга такое умеет.
реддит и твиттер делают именно запрос чтобы подгрузить комменты
[{
id: int,
title: string,
todos: [
{
id: int,
text: string,
isCompleted: bool
}
]
}]
суть: нужно запилить хуйню как на пикрил. идеи: создать отдельную модель todo и соединить с первой project. как это сделать хуй знает, может кто шаги объяснить? или мб похожий проект на гите есть
Я просто блять не могу больше так, пытался уйти на вим с солорграфом или вскоуд, но это всё работает так будто всё в альфа версии, там баг, тут баг... тут работает не до конца и так далее, это не говоря про постоянную настройку, хочется просто, чтобы из коробки было дохуя фич и они работали.
Этот вариант 100% пиратский, хотелось бы что-то более лицушное пусть и используя полумеры.
все пути конкретные - ты или платишь или нет.
1280x720, 0:04
Ты даже не пытался. Кыш из треда
Теперь оно имеет смысл, когда нет аргмуентов, нужно юзать super()
Но всё же, не понял разицу с пика выше.
Пойду курить доки. Спасибо
https://bhv.ru/pdfview/?to=view_2664_978-5-9775-4060-5.pdf
Там в конце часть const hiddenField = ...
Если я сделаю hiddenField.name = "post[files][]", то он загружает файлы, но file.name получается "files"
В контроллере в permitted_params есть (...,files: [])
Я хочу чтобы отображалось имя файла. Нужно в ручную делать attach или как?
Если сделать post[files][${hiddenField.name}]
То он будет ругаться на unpermitted params. files: [filename=>blob_id, filename2=>blob_id}
Наверно можно сделать accepts_nested_attributes, но судя по примеру по ссылке, там на гифке все работает без пердолинга
--
Так же вопрос. Когда я кидаю файлы, они сразу начинают загружаться. В терминале INSERT INTO "active_storage_blobs"
И потом когда я отправляю форму там
INSERT INTO "active_storage_attachments" ("name", "record_type", "record_id", "blob_id", "created_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"
UPDATE "active_storage_blobs" SET "metadata" = $1 WHERE "active_storage_blobs"."id" = $2
Кажется что тут что-то не так
А что тебе не понятно?
super(argument) - явно передаёшь какой-то аргумент
super 1 передаются все аргументы, которые пришли в метод
super() - без них
судя по всему file.blob.filename
Да я сразу не понял, что можно другие аргументы передавать. Просто ситуация выше меня смутила, ибо результат был идентичен
Что писать в bucket policy?
Файл загружается до отправки формы.
Вот какого хуя об этом не написано тут?https://edgeguides.rubyonrails.org/active_storage_overview.html
Вот какого хуя об этом не написано тут?https://edgeguides.rubyonrails.org/active_storage_overview.html
я на рубике не пишу совсем, но вот нагуглякал, может пунтк 1 в тему(JS валидатор который прогоняется когда файло выбрано)?
https://stevenyue.com/blogs/validate-attachment-file-size-and-type-in-rails/
еще
https://stackoverflow.com/questions/6440943/custom-validation-for-file-size-in-rails-before-being-uploaded
упоминается тот же carrierwave
Добавлю, что подозреваю что нужно заоверрайдить контроллер который создает pres signed url
Какая ситуация по вкату на Июль 2021?
Какая ситуация по вкату на Июль 2021?
Какая ситуация по вкату на Июль 2021?
Я в сомнениях какой сервис предложить чтобы слать туда все эти события а потом строить дешборды по ним. Из нужных фич - это фильтрация событий по разным параметрам(тип события, user_id, дата), агрегация(типа выбрать 5 топовых юзеров, посчитать количество за период). Я работал раньше с mixpanel, он вроде заточен как раз под такие штуки и там есть довольно гибкий язык запросов, но он вроде дорогой. Есть еще всякие amplitude но про них я ничего не знаю. Или брать какой-нибудь амазоновский dynamodb/redshift/kinesis и пердолиться с ним.
PowerBI.
>>2089439
В общем решил для тренировки вашу задачку
(сам в байтоебле до этого замечен не был).
Вопрос в том, решил ли я её самым оптимальным образом или можно лучше?
Есть ли ещё подобные задачки?
Кодирование:
number = form_index | (color_index << 2) | (x_coordinate << 5) |(y_coordinate << 13);
Раскодированние:
form = number & 0b11;
color = (number & (0b111 << 2)) >> 2];
x_coordinate = (number & (0b11111111 << 5)) >> 5;
y_coordinate = (number & (0b11111111 << 13)) >> 13;
Я надуюсь, что ты тот анон, что пришёл с вопросом.
>Вопрос в том, решил ли я её самым оптимальным образом или можно лучше?
Так это не задача, это задание на закрепление использования поразрядных операторов. Оптимально было бы использовать битовые структуры, чтобы самодокументирующийся код получился, но я про руби не знаю, есть ли тут такое вообще.
Владислав, иди нахуй
> в чем суть задания
сделать надо было еще вчера! хули ты не сделал! чтобы сел и сделал. времени час!
Объяснил, опытный рубист.
Двачну вопрос, я такой же ньюфаг. Зачем мне как заказчику, например, делать выбор в пользу руби, если питонистов и пхпшников на рынке на порядок больше?
> Зачем мне как заказчику, например, делать выбор в пользу руби, если питонистов и пхпшников на рынке на порядок больше?
В том, что заказчику похуй на том что ты там делаешь, он смотрет на готовый продукт и проверяет на наличие фич кликая по сайту, а что там под капотом в чёрной коробке ему глубоко похер и уж тем более на чём оно написанно.
Легаси, которое на западе популярно.
На андроиде можно, но ты заебешься, купи на авите дноутбук лучше.
Я сначала делал class Cat, который может быть как родителем, так и ребёнком, и класс Litter (помет котят), у которого есть father_id и mother_id, а у каждого котёнка есть litter_id. Оно работает как-то хуёво у меня.
Может, сделать AbstractCat, и от него наследовать BreedingCat и Kitten? А если, вдруг, котенок подрастёт и останется в разведение, можно будет перенести его в таблицу breeding_cats. Последних все равно будет относительно немного, хз.
Завтра ещё поковыряю и покажу конкретный код, если надо
Ну и вообще, нормально ли городить новую модель на каждый чих? Посоветуйте хорошие проекты с открытым кодом почитать.
Я бы все в одной модели делал.
>Как бы вы сделали на рельсах полное семейное дерево, в котором есть по два родителя
Родственные связи - отношение одного человека ко многим, соответственно, есть модель Человек, а так же модель РодственнаяСвязь, которая ссылается на двух людей и содержит тип отношения, Человек через ассоциацию has_many :through получает доступ ко всем своим родственникам.
Если на Litter вызвать #father или #mother - всё работает как ожидаемо
Если на котёнке вызвать #litter (где он родился), то тоже работает
А если на котяре вызвать #litters (в каких пометах он отец), то выплёвывает
Litter Load (0.6ms) SELECT "litters". FROM "litters" WHERE "litters"."mother_id" = ? AND "litters"."mother_type" = ? / loading for inspect */ LIMIT ? [["mother_id", 1], ["mother_type", "Cat"], ["LIMIT", 11]]
Traceback (most recent call last):
ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: litters.mother_type)
Вот этот суффикс _type я видел только тут https://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html
и, как я понял, он означает что-то вроде сабкласса в иерархии наследования (где таблица только одна, по основному классу).
Может, и правда сделать абстрактный класс кошачьего существа и от него наследовать кота и кошку?
Ещё попытался сделать так, что Cat has_many :kittens, through: :litters, as: :father/mother, но это уже на потом, если у меня самое основное не работает
Для класса Litter нужно прописать foreign_key в belongs_to ассоциациях, чтобы AR знал, на какие id опираться для извлечения данных, ты их прописал в миграции, но это должно быть прописано в модели в первую очередь.
Ассоциация Litter has_many :kittens не будет работать, так как нет данных о конечных id Cat для извлечения.
belongs_to содержит foreign_key внутри таблицы
has_many содержит foreign_key во внешней таблице
Соответственно: Cat has_many :father_for, class_name: 'Litter', foreign_key: 'father_id'
Вообще есть ощущение, что у тебя логическая ошибка при построении моделей, потомство по-сути подмножество котов, то есть входят в модель Cat, а каждый кот - чье-то потомство, одна сущность размазана по двум моделям, по этой причине возникает сложность с описанием ассоциаций.
>Ассоциация Litter has_many :kittens не будет работать, так как нет данных о конечных id Cat для извлечения
Но ведь это у меня как раз-таки и работало даже до того, как я расплакался и пришел на двач
>Вообще есть ощущение, что у тебя логическая ошибка при построении моделей, потомство по-сути подмножество котов, то есть входят в модель Cat, а каждый кот - чье-то потомство, одна сущность размазана по двум моделям, по этой причине возникает сложность с описанием ассоциаций.
Но мне надо, чтобы была группа котят, родившихся от одной пары в один день. Вроде логично реализовать так...
UPD: методом проб и ошибок пришёл к пкрлтд. Всё работает как задумано, но has_many :litters, foreign_key: 'father_id' отменяет has_many :litters, foreign_key: 'mother_id'.
Это проблема именно на стороне модели Cat, т. к. Litter всё переваривает, и в базе конфликтов никаких нет. Запрос такой:
SELECT "litters".* FROM "litters" WHERE "litters"."father_id" = ?
Самое простое решение, что я вижу - переписать в классе Cat метод #litters, на Litter.find_by, но с условным оператором, который будет проверять пол кота, на котором вызывается запрос.
И в целом как, не сильно говно? Я лишнего не понаписал вроде, постарался максимально компактно записать всё.
ебанарот, а чё ненужные скрины не отвалились-то?
>UPD: методом проб и ошибок пришёл к пкрлтд. Всё работает как задумано, но has_many :litters, foreign_key: 'father_id' отменяет has_many :litters, foreign_key: 'mother_id'.
А нафига ты их разделяешь? У тебя же есть пол в модели cats.
Заказчику россиянину конечно ваш Ruby не нужен.
Вы стату посмотрите, какой легаси? Ruby в лидерах
Пусть по кайфу будет, а барина на вилы
Скорость разработки же. Руби весьма популярен для стартапов.
https://charliereese.ca/article/top-50-y-combinator-tech-startups
post "/gems/:gems/categories" do
gem_name = params[:gems]
redirect "/" unless gem_name
gem = Gems.fetch_gem_by_name(gem_name)
next 404 unless gem
category_ids = params["categories"] ? params["categories"].map(&:to_i) : []
categories = Category.where(id: category_ids).to_a
believe = params["believe"]
token = Token.new(params["token"])
CategoryChange.new(gem, categories, token, believe).execute
redirect "/gems/#{gem.name}"
end
Я про эту стату и писал выше. В СНГ конечно всё иначе.
В США очень популярен.
Кому интересно что пилят, лезем сюда:
https://trends.builtwith.com/websitelist/Ruby-on-Rails/Russia
https://github.com/jeromedalbert/real-world-rails
>Мамке и папке.
Ты не понял. У тебя это одна и та же модель Cat, это просто алиасы. Из-за этого ты два foreign_key делаешь в одну таблицу.
Тебе вообще не нужно belongs_to: father, belongs_to: mother - беспричинно усложняешь, с учетом того, что пол (sex) у тебя в модели Cat уже есть (кстати, почем он binary, а не integer???)
Сделай belongs_to: parent, class_name: 'Cat'
Выборки делай методами или скоупами.
Например:
def father
parent.where(sex: :male)
end>>2093881
> binary
Интереса ради тыкнул. Охуел, когда увидел, что это руби-строки "1" и "0", уже поменял.
> belongs_to :parent
А я не понял, а в таблице, получается, на каждый litter только один parent_id будет?
> методами или скоупами
Да со стороны litter у меня уже всё работает. К стандартным только пикрлтд добавил (в Cat), вроде нормально. Просто я пездюк без опыта, и мне непонятно, дебильные ли это костыли или оптимальный способ решения.
я конечно сам рубист уже много лет, много чем кроме руби пописал, в общем руби нравятся, но больше всего ненавижу в руби всяких шизиков как ты
> без шизосмеси методчейнов и функций от функций.
если ты про замыкания и возможность передавать функцию как аргумент?
А в руби так нельзя, да?
А блядь там же сахар, что функцию можно без скобок вызывать, поэтому теперь нельзя реализовать нормально передачу функции как объект в языке. Поэтому они ебанули блоки, вот это решение, не шизоидное. Ну ок, теперь пишем ебаные блоки, зато скобки не пишем, аа блядь забыл, в рубишном стайлгайде почти всех компаний, если аргументов больше 1 то скобки ставим. Хуево вышло, тебе так не кажется?
Да и ебанули эти блоки а толку, сахарного декоратора тоже нет, в жопу себе эти блоки можешь засунуть
> От двоеточий после def и if, которые абсолютно никакой информации не несут
в руби ты енд в конце ставишь, но зато без : и табуляции. Да даже если ненавидишь вложения по табуляции, в с подобном синтаксисе со скобками {} лучше, нахуй эти end. Лучше потому что если у тебя легаси метод на овер 200 строк, ты в виме, да и в любом редакторе из коробки найдешь конец любого блока. в случае руби, тебе нужен специальный парсер, который найдет найдет нужный енд. ДЛЯ МЕНЯ ПИЗДЕЦ КОРОБИТ
> нет половины методов, которые в руби искаропки.
Половина из них делают одно и тоже, но мб чуть по другому. Либо одно и тоже (алиас на другую функцию), но зато когда какой-нибудь умник в коде решит выпендриться знанием более in english speaking метода, тебе придется лезть в документацию и тратить время.
> Ну и итераторы в руби лучше, чем for и while, если проникнешься.
про list comprehension ты конечно же не слышал
У каждого Кота есть мать и отец, которые в свою очередь являются котами, то есть достаточно одной модели и одной таблицы.
>про list comprehension ты конечно же не слышал
Глянул ради интереса, это нормальная практика на питоне - писать такое?
Знаю что есть более свежие книги, но хочу начать с этой
Если кто читал, скажите что из написанного потеряло актуальность
Упс, она в 2014 переведена на русский. Сама книга 2011 года.
Листал, она старая очень. Хартла читай. В сети есть по Rails 6, но на английском. Можешь сверять с предыдущим русскоязычным изданием.
Руби нужен когда ты заебался бороться с дизайном языка-нейм и наконец понял, что хочешь просто писать программы обычным английским языком, по мере возможности. Начинать с руби - не могу порекомендовать, я не представляю как такой человек потом выйдет в остальное дикорастущее ИТ и не сдохнет от первого же разрыва шаблона, которых там как говна за баней, как будто придумывать всякую экстравагантную хуйню - являлось основной целью дизайнеров других ЯП, чтобы быть нитакими как все.
Кстати даже эта книга что я скинул, оказывается имеет новую редакцию для 6 рельсов от 2020года.
> Начинать с руби - не могу порекомендовать, я не представляю как такой человек потом выйдет в остальное дикорастущее ИТ и не сдохнет от первого же разрыва шаблона
О чём речь, можно подробнее?
Вон 6 версия верхняя левая.
Я пдфок накачал и 1 книгу даже купил. Все что выделено, это 20-21 год.
Ага, вижу. Как ты их читаешь, тем более такое количество, с экрана неудобно
Head First не зашла в этот раз. Серия неплохая в целом.
Там Sinatra ещё
Ruby для романтиков это которая всеть утекла или покупная?
Я листал ту что в сеть попала, что-то она не очень, а цена высокая
Я вкатыш. Только начал читать книги.
Прошел этот курс https://rubyschool.us/ и от них бесплатная книга книга по руби "для романтиков"(не рельсы. В ссылке что скинул)
Покупал электронную эту https://bhv.ru/product/samouchitel-ruby/
На русский как я понял книги очень хуево переводят. Спустя года 3 после релиза.
Ну хуй знает. На руби можно тихо-спокойно ознакомиться с основными концептами программирования без особой ебли если не считать ебучий линукс с RVM)))))))))))))). Если бы я начинал на питоне или, ещё хуже, на чём-то джаваподобном, я бы через три дня забросил и пошёл на завод работать.
Симдянова в бумаге брал. На пару раз прочесть хватит, потом развалится.
> На русский как я понял книги очень хуево переводят
Это да. Хочется бить их и за волосы таскать
Симдянова в бумаге брал. На пару раз прочесть хватит, потом развалится.
> На русский как я понял книги очень хуево переводят
Это да. Хочется бить их и за волосы таскать
Так же не могу скачать пакеты, по крайней мере команда на скачку графических пакетов ни к чему не привела. Кто-нибудь знает в чем дело?
Скрины давай, ничего не понятно
RoR для разработки дейтинг-приложения подойдёт? Какие сложности могут быть? Интерактив интересен, чат, живые уведомления, статус онлайн и прочее
Весь этот функционал видел в гайдах на Drifting Ruby, только за бабки.
тригерит forums_controller
resources :forums do
resources :posts
end
а тут posts_controller
resources :forums, path: '' do
resources :posts, path: ''
end
И где в этом случае нужно рендерить посты?
Можно в posts_controller проставлять forum(before_action: set... only: :index)
Либо в forums_controller
Наверно, все же правильнее рендерить посты из forums#show(Это если брать аналогию со стандартным примером post/comments)
Зачем....
> Что руби уже наконец сдох?
Если тебя этот вопрос волнует, то значит есть какой-то профит с этого?
ну да, когда руби сдохнет столько народу на заводы за станки пойдут Роиссию матушку с колен поднимать
Это копия, сохраненная 31 июля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.