DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.21K subscribers
145 photos
2 videos
8 files
981 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
И по мотивам изображения выше: 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
https://doka.guide/ - прислал Илья Демченко, гайд по HTML/CSS/JS
Открыл одну свою старую библиотеку, которую писал когда-то для api спортивного чгк, увидел это, закрыл:

      def self.included(klass)
klass.const_set('Search',
Class.new(klass) do |*_args|
def api_path
super + '/search'
end
end
)

# The actual method to perform searching
# Instantiates a Search class with the given search params
# and send a GET request to the proper URI (defined above)
klass.define_singleton_method :search do |params|
klass.const_get('Search').new(params)
end
end


😂
Сегодня будет очень важный урок по Ruby on Rails, в котором мы обсудим авторизацию (authorization) и её отличия от аутентификации (authentication). Внедрим авторизацию в Rails с помощью решения Pundit, обсудим политики, а также создадим сервисный объект "гостевой пользователь". Кроме того, затронем наследование контроллеров и некоторые другие моменты. К концу урока у нас получится готовое приложение с разделением прав доступа по ролям. https://www.youtube.com/watch?v=xvwsEb60PUA
И ещё одно небольшое объявление. В следующий понедельник (25.10), если ничего не изменится, я буду проводить стрим по теме "Язык Solidity и программирование смарт-контрактов Ethereum: введение" на платформе MCS. Стрим будет в дискорде, вот на этом сервере, запись тоже постараюсь организовать. Начало в 19:00 UTC+3, ближе к делу ещё уточню, если будут изменения. 🤟 https://discord.gg/3VJSm3zG (да, уточню, что это не мой сервер, им владеет школа). Инвайт кажется истёк, я запрошу новый и опубликую чуть позже