DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.21K subscribers
145 photos
2 videos
8 files
981 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Всем привет! Что ж, у меня был небольшой отпуск плюс, вроде как, отмечался ДР, так что по добрым традициям хоббитов я не получаю подарки, а дарю. Небольшой "клип", посвящённый всем моим друзьям, родственникам, студентам и зрителям. 😃 https://www.youtube.com/watch?v=EwKNZ0dXC9E
В этом видео мы поговорим о том, как привязать вопросы и ответы к конкретному пользователю с помощью отношения "один-ко-многим". Также ещё немного обсудим миграции и внедрим функционал отображения аватаров с помощью сервиса Gravatar. Помимо этого, поговорим про функции обратного вызова (callbacks), узнаем, зачем они нужны и как их создавать. https://www.youtube.com/watch?v=ax2aKNVjjto
В этом уроке по Ruby on Rails 6 мы поговорим о том, как создавать и работать с полиморфическими (полиморфными, polymorphic) отношениями. Мы позволим комментировать пользователям сразу и вопросы, и ответы. Кроме того, мы рассмотрим ситуацию, когда на странице отображается сразу множество форм для создания полиморфических ассоциаций и как сделать так, чтобы сообщения об ошибках не дублировались в каждой форме. Помимо этого затронем библиотеку Bullet для оптимизации ваших запросов к БД. https://www.youtube.com/watch?v=1b1JwoblpHQ
И по мотивам изображения выше: https://i.imgur.com/pCp1zRQ.png Всем отличных выходных 🤟
Добавлю сюда для тех, кого нет в чате (хотя почему вас там до сих пор нет? 😄) https://devdocs.io/ Спасибо Илье Барицкому за ссылку 👍
Сегодня будет большой и важный урок по нескольким темам. Мы обсудим отношение многие-ко-многим (many-to-many, has_many through) и узнаем, как создавать такие записи в контроллере на примере тегов для вопросов. Также добавим Select2 для более удобного поиска тегов, сделаем этот поиск асинхронным (с помощью ajax, то есть по типу "search as you type") и добавим новое пространство имён Api, в котором задействуем библиотеку jBuilder.

Обратите внимание, что урок и так получился длинным, поэтому пару вещей я не показал. Советую самостоятельно изучить исходный код этого урока на GitHub для тегов - то есть создание/редактирование вопроов, модель Question и поиск.
https://www.youtube.com/watch?v=hKJKTcc7P9g
По следам урока выше: было предложено использовать вместо select2 библиотеку https://github.com/orchidjs/tom-select Она появилась всего год назад, но выглядит очень круто. Честно сказать, я не следил за библиотеками JS последнее время и её упустил из виду. Так что спасибо Александру за совет, в следующем видео обязательно покажу это решение тоже (да, соответствующий комментарий я вернул, тк YT его опять удалил)
Как говорится, вместо тысячи слов. Почему переменные класса - это зло? Есть простой код:

class Animal
@@count = 0

def self.inc
@@count += 1
end

def self.count
@@count
end
end

class Cat < Animal
@@count = 100

def self.count
@@count
end
end

Animal.inc

puts Animal.count

Что он вернёт? Внезапно, 101. Почему? Потому что @@count затирается в потомке. Surprise! Кстати, этот тест имеется на одном сайте как часть собеседования в Сбербанк. Я бы очень не хотел работать в компании, которая спрашивает вот такое (и ещё интересуется, можно ли вызвать лямбду через ->() {}() и ->(){}[]). Это называется "месье знают толк в извращениях". Я не припомню ни одного случая за много лет, когда подобные знания мне потребовались
И ещё немного о переменных класса. История выше повторится, если, например, мы сделаем два разных файла animal.rb и cat.rb с кодом:

class Animal
@@count = 0

def self.inc
@@count += 1
end

def self.count
@@count
end
end


class Cat < Animal
@@count = 100

def self.count
@@count
end
end


Далее сделаем файл main.rb:

require_relative 'animal'
require_relative 'cat'

Animal.inc

puts Animal.count


На экран опять-таки будет выдано 101 🤓
Сегодня мы поговорим о том, как внедрить ролевую систему (чтобы пользователи могли быть модераторами или админами) в Rails с помощью enum. Также обсудим решение TomSelect как замену Select2 и узнаем о том, что такое сериализация, а также внедрим её с помощью Blueprinter. https://www.youtube.com/watch?v=pQ0YOY01t_Q
Из забавного: периодически вместо того, чтобы написать block_given?, у меня получается glock_given? 😄 https://i.imgur.com/0sq304S.jpg
И ещё совсем небольшой трюк на сегодня. Если вы пишете библиотеку, в которой хотите задействовать путь к корню проекта Rails, но не уверены, что Rails.root всегда будет определён, то можно использовать вот такой приём https://github.com/bodrovis/lokalise_rails/blob/master/lib/lokalise_rails/utils.rb