Сегодня будет большой и важный урок по нескольким темам. Мы обсудим отношение многие-ко-многим (many-to-many, has_many through) и узнаем, как создавать такие записи в контроллере на примере тегов для вопросов. Также добавим Select2 для более удобного поиска тегов, сделаем этот поиск асинхронным (с помощью ajax, то есть по типу "search as you type") и добавим новое пространство имён Api, в котором задействуем библиотеку jBuilder.
Обратите внимание, что урок и так получился длинным, поэтому пару вещей я не показал. Советую самостоятельно изучить исходный код этого урока на GitHub для тегов - то есть создание/редактирование вопроов, модель Question и поиск.
https://www.youtube.com/watch?v=hKJKTcc7P9g
Обратите внимание, что урок и так получился длинным, поэтому пару вещей я не показал. Советую самостоятельно изучить исходный код этого урока на GitHub для тегов - то есть создание/редактирование вопроов, модель Question и поиск.
https://www.youtube.com/watch?v=hKJKTcc7P9g
YouTube
Ruby on Rails 6/7, урок #16 | Многие-ко-многим, теги, select2, ajax и поиск, jBuilder
Сегодня будет большой и важный урок по нескольким темам. Мы обсудим отношение многие-ко-многим (many-to-many, has_many through) и узнаем, как создавать такие записи в контроллере на примере тегов для вопросов. Также добавим Select2 для более удобного поиска…
По следам урока выше: было предложено использовать вместо select2 библиотеку https://github.com/orchidjs/tom-select Она появилась всего год назад, но выглядит очень круто. Честно сказать, я не следил за библиотеками JS последнее время и её упустил из виду. Так что спасибо Александру за совет, в следующем видео обязательно покажу это решение тоже (да, соответствующий комментарий я вернул, тк YT его опять удалил)
GitHub
GitHub - orchidjs/tom-select: Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js…
Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget with native-feeling keyboard navigation....
Как говорится, вместо тысячи слов. Почему переменные класса - это зло? Есть простой код:
class AnimalЧто он вернёт? Внезапно, 101. Почему? Потому что
@@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
@@count затирается в потомке. Surprise! Кстати, этот тест имеется на одном сайте как часть собеседования в Сбербанк. Я бы очень не хотел работать в компании, которая спрашивает вот такое (и ещё интересуется, можно ли вызвать лямбду через ->() {}() и ->(){}[]). Это называется "месье знают толк в извращениях". Я не припомню ни одного случая за много лет, когда подобные знания мне потребовалисьИ ещё немного о переменных класса. История выше повторится, если, например, мы сделаем два разных файла animal.rb и cat.rb с кодом:
Далее сделаем файл main.rb:
На экран опять-таки будет выдано 101 🤓
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 🤓
Моя новая статья о тестировании локализации (обзор) https://lokalise.com/blog/localization-testing/
Lokalise
Localization testing: What is it & how to do it (+sample project)
In this article we will discuss what localization testing is, what steps it involves, and what important things you should consider.
Сегодня мы поговорим о том, как внедрить ролевую систему (чтобы пользователи могли быть модераторами или админами) в Rails с помощью enum. Также обсудим решение TomSelect как замену Select2 и узнаем о том, что такое сериализация, а также внедрим её с помощью Blueprinter. https://www.youtube.com/watch?v=pQ0YOY01t_Q
YouTube
Ruby on Rails 6/7, урок #17 | Ролевая модель, enum, TomSelect, сериализация
Сегодня мы поговорим о том, как внедрить ролевую систему (чтобы пользователи могли быть модераторами или админами) в Rails с помощью enum. Также обсудим решение TomSelect как замену Select2 и узнаем о том, что такое сериализация, а также внедрим её с помощью…
Мой знакомый Райан Бигг замутил свой вариант игры Magic: The Gathering, только на Ruby 🤓 https://github.com/radar/mtg
GitHub
GitHub - radar/mtg: Magic: The Gathering, but in Ruby
Magic: The Gathering, but in Ruby. Contribute to radar/mtg development by creating an account on GitHub.
Из забавного: периодически вместо того, чтобы написать
block_given?, у меня получается glock_given? 😄 https://i.imgur.com/0sq304S.jpgПрислал коллега Илья Барицкий. Материалы по Ruby:
https://github.com/dreikanter/ruby-bookmarks
https://github.com/markets/awesome-ruby
https://github.com/Sdogruyol/awesome-ruby
https://github.com/asyraffff/Open-Source-Ruby-and-Rails-Apps
https://github.com/dreikanter/ruby-bookmarks
https://github.com/markets/awesome-ruby
https://github.com/Sdogruyol/awesome-ruby
https://github.com/asyraffff/Open-Source-Ruby-and-Rails-Apps
GitHub
GitHub - dreikanter/ruby-bookmarks: Ruby and Ruby on Rails bookmarks collection
Ruby and Ruby on Rails bookmarks collection. Contribute to dreikanter/ruby-bookmarks development by creating an account on GitHub.
И ещё совсем небольшой трюк на сегодня. Если вы пишете библиотеку, в которой хотите задействовать путь к корню проекта Rails, но не уверены, что
Rails.root всегда будет определён, то можно использовать вот такой приём https://github.com/bodrovis/lokalise_rails/blob/master/lib/lokalise_rails/utils.rbGitHub
lokalise_rails/utils.rb at master · bodrovis/lokalise_rails
Ruby on Rails integration for Lokalise. Contribute to bodrovis/lokalise_rails development by creating an account on GitHub.
Нейросеть передаёт привет всем участникам чата из РФ https://twitter.com/neural_meduza/status/1449027301262430230 Отличной пятницы! 😂
Twitter
Neural Meduza
В России отключили JavaScript из-за нехватки времени на раскачку
Любопытное решение для поиска проблемных мест в коде: https://github.com/troessner/reek
GitHub
GitHub - troessner/reek: Code smell detector for Ruby
Code smell detector for Ruby. Contribute to troessner/reek development by creating an account on GitHub.
Открыл одну свою старую библиотеку, которую писал когда-то для 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
YouTube
Ruby on Rails 6/7, урок #18 | Авторизация (Pundit), роли, объект "гость"
Сегодня будет очень важный урок по Ruby on Rails, в котором мы обсудим авторизацию (authorization) и её отличия от аутентификации (authentication). Внедрим авторизацию в Rails с помощью решения Pundit, обсудим политики, а также создадим сервисный объект "гостевой…
И ещё одно небольшое объявление. В следующий понедельник (25.10), если ничего не изменится, я буду проводить стрим по теме "Язык Solidity и программирование смарт-контрактов Ethereum: введение" на платформе MCS. Стрим будет в дискорде, вот на этом сервере, запись тоже постараюсь организовать. Начало в 19:00 UTC+3, ближе к делу ещё уточню, если будут изменения. 🤟 https://discord.gg/3VJSm3zG (да, уточню, что это не мой сервер, им владеет школа). Инвайт кажется истёк, я запрошу новый и опубликую чуть позже
Discord
Discord - A New Way to Chat with Friends & Communities
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.