Ruby on Rails 6/7, урок #5 | Отношение "один-ко-многим" и обработка ошибок

  Рет қаралды 7,900

Ilya Krukowski

Ilya Krukowski

Күн бұрын

Пікірлер: 76
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
ВНИМАНИЕ! Друзья, в видео закралась неточность, которую я просто-напросто забыл исправить. При создании метода show для вопросов на моменте 00:19:10, нужно не просто писать `Answer.order created_at: :desc` (вот эта строка кода github.com/bodrovis-learning/RailsSeriesYT/blob/lesson_6/app/controllers/questions_controller.rb#L6), а всё-таки `@question.answers.order created_at: :desc`, чтобы вытащить не просто вообще ВСЕ ответы в принципе, а только те ответы, которые были написаны для КОНКРЕТНОГО вопроса. Ну, и аналогичная история в контроллере ответов в методе create, куда я просто скопировал и вставил ту же строку - её, конечно, тоже надо поправить. Прошу прощения, в следующем видео мы это обязательно обсудим. Спасибо зрителю Victor Malukhin за внимательность!
@EdritKolotit
@EdritKolotit 3 жыл бұрын
В закреп.
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
@@EdritKolotit Ага, точно
@Евгений-н1б4с
@Евгений-н1б4с 3 жыл бұрын
Лучший канал по рельсам среди русскоязычных, автор большое спасибо за труд))
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
на здоровье! :)
@oksanagrigorenko316
@oksanagrigorenko316 2 жыл бұрын
Добрый день, Илья! Огромное спасибо Вам за Ваш курс! Профессионально донесено до аудитории, а это не каждый может!
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 2 жыл бұрын
На здоровье
@SuperYuri009
@SuperYuri009 Жыл бұрын
KZbin - лучшая платформа. Udemy до KZbin как до луны.🙂
@muradgadjiev3556
@muradgadjiev3556 3 жыл бұрын
Просто шикарная подача материала! Спасибо Вам огромное за Вашу работу!
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Благодарю за отзыв %)
@ВикторИвлиев-н2ч
@ВикторИвлиев-н2ч 3 жыл бұрын
Все на высоте, улыбнули ники комментаторов ruby and DHH =)
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Ну, какой поп - такой и приход, как говорится :D
@vladimirgritskevich2997
@vladimirgritskevich2997 2 жыл бұрын
спасибо, Вам большое за такой качественный контент!
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 2 жыл бұрын
@Aluston1783
@Aluston1783 2 жыл бұрын
спасибо за видос! очень доступно.
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 2 жыл бұрын
@404alex_eu
@404alex_eu 3 жыл бұрын
рассказываете шикарно! доступно и понятно!
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Благодарю, буду стараться :)
@dhh5606
@dhh5606 3 жыл бұрын
Поддерживаю насчет тестов! Разобрать бы синтаксис, на youtube тестам мало внимания.
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Ок :)
@n1nz1k
@n1nz1k 3 жыл бұрын
@@IlyaBodrovKrukowski поддерживаю, видео по тестам было бы очень в тему. Кроме Хартла для начинающих очень мало информации по ним. И как всегда спасибо за отличное видео!
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
@@n1nz1k Окей, спасибо!
@rankcwolf7732
@rankcwolf7732 3 жыл бұрын
@@IlyaBodrovKrukowski rspec?
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
@@rankcwolf7732 Ага
@observerone
@observerone 2 жыл бұрын
Прохожу второй раз. Всё по кайфу. Илья, единственное пожелание по возможности делать более облегчённые серии по 3-4 на отдельные темы. Курс 20 видео интересно но тяжело.
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 2 жыл бұрын
Мысль понятна, но просто это не очень удобно с точки зрения записи и редактирования
@xaogao
@xaogao 3 жыл бұрын
Спасибо за видео
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Благодарю!
@kremkasu
@kremkasu Жыл бұрын
Отличные уроки! Спасибо за вашу работу! Не знаю, не смотрела вперед, вы будете использовать gem simple_form? Как добиться работы встроенной в этот gem валидации когда мы рендерим в другой контроллер? Буду благодарна за ответ!
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski Жыл бұрын
Добрый! Нет, все формы будут делаться самостоятельно - там можно понять принцип их работы лучше
@Дмитрий-д4п5т
@Дмитрий-д4п5т 3 жыл бұрын
Илья, спасибо за шикарную серию. Лучшее, что я нашёл по RoR. Подскажите, пожалуйста. Вы написали метод destroy в answers_controller.rb def destroy answer = @question.answers.find params[:id] .... end А можно ли было отобрать удаляемый ответ вот так: def destroy answer = Answer.find params[:id] .... end Ведь id ответа у нас всегда уникальный. Я попробовал, работает (ответ удаляется). Но не знаю, правильно ли это с точки зрения RoR и связей в БД
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Хороший вопрос! Да, можно, конечно. Два момента: в некоторых случаях нам может быть важно удостовериться, что вопрос таки принадлежит нужному ответу, поэтому @question.answers.find поможет в этом. К примеру, в случаях, если важно проверять владение - скажем, юзер может удалять только комментарии под постами, который он написал сам... Ну, и надо помнить, что в обоих случаях find вернёт исключение, если такого ID не имеется. Я предпочитаю всё-таки использовать @question.answers в данном случае, так как у нас маршруты вложенные, то есть мы поясняем, что важную роль играют и ID вопросов, и ответов. Но здесь это, скорее, дело вкуса
@Дмитрий-д4п5т
@Дмитрий-д4п5т 3 жыл бұрын
@@IlyaBodrovKrukowski Спасибо!
@dmitrys.p.5241
@dmitrys.p.5241 2 жыл бұрын
Добрый день Илья!
@dmitrys.p.5241
@dmitrys.p.5241 2 жыл бұрын
Спасибо за урок. А почему вот здесь мы объявляем локальную переменную а не переменную экземпляра? def destroy answer = @question.answers.find params[:id] answer.destroy flash[:success] = "Answer deleted!" redirect_to question_path(@question) end
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 2 жыл бұрын
@@dmitrys.p.5241 А она нигде в представлении не используется, поэтому можно локальной сделать
@dmitrys.p.5241
@dmitrys.p.5241 2 жыл бұрын
@@IlyaBodrovKrukowski Логично) спасибо
@ksil6609
@ksil6609 3 жыл бұрын
Круть. Вы уже думали, о чем будут уроки после завершения этого проекта? Я бы посмотрел от вас пример построения проекта на микросервисах. Спасибо за уроки
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Спасибо большое! Что ж, мысли разные. Были планы по авто-тестам, может быть, по чему-нибудь из мира JS. Ну, надо бы закончить серию по regexp, тк там ещё остались вопросы некоторые, но она пока имеет меньшую популярность, так что отложил её в долгий ящик. Ещё готовы некоторые примеры кода для темы "разработка квиза на Ruby", просто никак не доходят руки это записать
@sysop14
@sysop14 3 жыл бұрын
@@IlyaBodrovKrukowski По тестам было бы очень интересно!
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
@@sysop14 Ок, пожелание услышал
@gang1738
@gang1738 3 жыл бұрын
@@IlyaBodrovKrukowski да, тесты важная вещь!)
@vladimirgritskevich2997
@vladimirgritskevich2997 2 жыл бұрын
cool!
@alexanderyakovlev5201
@alexanderyakovlev5201 3 жыл бұрын
Получится вкратце объяснить разницу в добавлении методов в concern с хуком included do и без него? :) На практике и из документации пока не смог уловить.
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Ну, там основная фишка в том, что если загружается concern, который в свою очередь зависит от какого-то другого модуля, который грузится в этом concern, то использование included do и всех этих штук правильным образом погружает эти зависимости и всё корректно работает, вот тут api.rubyonrails.org/classes/ActiveSupport/Concern.html поясняется этот пример (там про модули Foo и Bar). В самом же простом случае особенной разницы нету, если честно
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Ну, и важно то, что методы из модуля будут запускаться в контексте класса, в который модуль и подгружается, это зачастую тоже важно. Поэтому подчеркну, что хотя в САМОМ простом случае разницы не будет, лучше всегда использовать included, чтобы не появлялось каких-то сложно обнаруживаемых багов. stackoverflow.com/questions/28009772/ruby-modules-included-do-end-block - вот ещё по теме обсуждение. У меня есть несколько видео по метапрограммированию, в том числе и про included
@alexanderyakovlev5201
@alexanderyakovlev5201 3 жыл бұрын
@@IlyaBodrovKrukowski Материалы по обеим ссылкам первым делом просмотрел, когда возник вопрос :) Ну, с вашими комментариями стало более понятно. Благодарю!
@ВладиславДмитров-т5т
@ВладиславДмитров-т5т 3 жыл бұрын
Подскажите пожалуйста, какая программа используется, когда хочешь обвести что-нибудь на экране или написать (в данном случае зелёным цветом)
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Хороший вопрос! Это умеет Camtasia Studio, где я записываю видео. Можно рисовать в реальном времени, либо добавлять эффекты потом. Для более сложных вещей использую After Effects, но в данном случае это перебор, такой сложный функционал просто не нужен.
@maksimkorelskii1458
@maksimkorelskii1458 2 жыл бұрын
Скажите, пожалуйста, а можно ли в данном случае создать ответ без привязки к вопросу (чтобы в question_id был nill например), а потом уже ответ привязать к вопросу. Например все эти манипуляции сделать через консоль rails c. У меня не получается так сделать, запись не вносится в таблицу (БД), а просто остаётся в памяти.
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 2 жыл бұрын
Да, в целом это реально. Только тогда в модели для belongs_to нужно передать опцию optional: true Объяснение всех опций тут api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to В этом случае можно создавать ответ без вопроса
@maksimkorelskii1458
@maksimkorelskii1458 2 жыл бұрын
@@IlyaBodrovKrukowski спасибо большое!
@pavelerokhin1512
@pavelerokhin1512 6 ай бұрын
up!
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 6 ай бұрын
@vladimirm4617
@vladimirm4617 3 жыл бұрын
Как всегда материал преподносится очень доходчиво и интересно Вопрос: Планируется видео про выгрузку данных из рельсового приложения в формат MS Excel ?
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Спасибо, хорошее предложение! Можно сделать, почему бы и нет - для этого есть решение axlsx_rails, например (а поддержка csv прямо в ruby имеется)
@Ruby-ie9io
@Ruby-ie9io 3 жыл бұрын
Как разница у t.belongs_to и add_reference в миграциях?
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Никакой: api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Table.html#method-i-references и api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_belongs_to
@Евгений-н1б4с
@Евгений-н1б4с 3 жыл бұрын
Добрый день, может кто объяснить момент, связанный с роутингом, а именно, к примеру возьмем мы и добавим на странице /questions/4/ какой нибудь answer не валидный, после чего наш url изменится на /questions/4/asnwers по вполне понятным причинам, т.к мы долбанули по методу post в попытке сделать create, так вот если мы обновим страницу в таком виде /questions/4/asnwers все крашнется, т.к такого роута нет, как этого избежать ? ведь это не совсем корректное поведение вроде
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
Ну, если честно, то это ожидаемое поведение. :) Избежать этого можно, если создать маршрут get типа: get 'questions/:id/answers', to: 'answers#index' а в самом методе index сделать редирект куда-нибудь. Впрочем, я бы не сильно беспокоился на этот счёт, так как юзер вряд ли будет обновлять страницу таким образом...
@rickbacker1
@rickbacker1 Жыл бұрын
“rails db:reset /usr/bin/env: «ruby.exe» no such file linux. Подскажите, где мне изменить настройки, чтобы на линукс не выдавало этой ошибки?
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski Жыл бұрын
Сходу не скажу, лучше глянуть гайды по настройке на nix, в первом видео были ссылки на это всё. Я просто на Linux особо не разрабатываю
@skarabei2303
@skarabei2303 2 жыл бұрын
Все круто, но можно показать более подробнее об альгоримьi и патернь
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 2 жыл бұрын
Посмотрим, по возможности :)
@rickbacker1
@rickbacker1 Жыл бұрын
Как запусть эту аппку? `rails s` не работает..
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski Жыл бұрын
Должен работать, возможно, при установке Ruby какие-то проблемы были. Но если есть ruby и сделан bundle i то всё должно быть ок, там вариантов нет особенно.
@mike09b
@mike09b 2 жыл бұрын
19:10 @answers = @question.answers... ?
@mike09b
@mike09b 2 жыл бұрын
увидел
@remotronic
@remotronic 3 жыл бұрын
В questions_controller.rb @answers = Answer.order created_at: :desc выведет все ответы для всех вопросов, вроде по логике нужно указывать вопрос, для которого нужно дёргать ответы
@remotronic
@remotronic 3 жыл бұрын
Я думаю правильней будет `@answers = @question.answers.order created_at: :desc`
@IlyaBodrovKrukowski
@IlyaBodrovKrukowski 3 жыл бұрын
@@remotronic А вы правы, между прочим. Я хотел это добавить, но забыл просто. Обязательно поправим в след видео. Пока написал отдельный комментарий с уточнением. Спасибо за внимательность!
@remotronic
@remotronic 3 жыл бұрын
@@IlyaBodrovKrukowski C нетерпением жду следующих видео!
South African’s Dr Naledi Pandor on ICJ genocide case against Israel
6:41
Players vs Pitch 🤯
00:26
LE FOOT EN VIDÉO
Рет қаралды 126 МЛН
За кого болели?😂
00:18
МЯТНАЯ ФАНТА
Рет қаралды 2,1 МЛН
The Singing Challenge #joker #Harriet Quinn
00:35
佐助与鸣人
Рет қаралды 36 МЛН
JWT авторизация. Основы JWT - механизма.
6:45
Хочу вАйти
Рет қаралды 16 М.
UN Special Rapporteur Francesca Albanese in Canada this week
22:09
CBC News Manitoba
Рет қаралды 18 М.
Tailscale: NETWORKING MAGIC!
25:51
Level1Techs
Рет қаралды 27 М.
Players vs Pitch 🤯
00:26
LE FOOT EN VIDÉO
Рет қаралды 126 МЛН