#12 Sortable Nested Form - Онлайн-школа на Ruby on Rails

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ม.ค. 2025

ความคิดเห็น • 15

  • @superchelll
    @superchelll 5 ปีที่แล้ว

    указывать inverse_of нужно в случае указания нестандартного имени, например если ты указываешь в модели SomeAssociaton - belongs_to :exersice, class_name: 'Lesson', а в модели Lesson - has_many :some_associations без inverse_of: :exercise, то обращение к some_association.exercise создаст запрос к БД, даже если обратная связь уже загружена. В остальных случаях обратная связь определяется автоматически.

    • @alekseyevdokimov1895
      @alekseyevdokimov1895  5 ปีที่แล้ว +1

      В старых рельсах inverse_of нужно было указывать чтобы сократить количество запросов.
      Например вот такая штука Course.last.lessons[0].course.lessons[0].course без inverse_of делала 5 запросов, а с inverse_of только 2. Тоесть каждый дочерний элемент получал родительский в комплекте и не было необходимости лезть за ним опять в базу. Сейчас в новых рельсах это все работает из коробки и уже нет необходимости его указывать. Но это все так, историческая справка, к счастью это уже знать не обязательно)

    • @superchelll
      @superchelll 5 ปีที่แล้ว

      @@alekseyevdokimov1895 это да, но в случае описанном мной выше без inverse_of рельса все так же как и раньше будет генерить лишние запросы

    • @alekseyevdokimov1895
      @alekseyevdokimov1895  5 ปีที่แล้ว

      @@superchelll а ну да, понял о чем ты, типа работает из коробки но не всегда. Да наверное так и есть.

  • @Valteroff
    @Valteroff 4 ปีที่แล้ว

    Я правильно понимаю, что ява-скрипт каждый раз перенумеровывает весь список секций начиная с 1, а acts_as_list апдейтит сразу все позиции в базе по всем секциям.? Т.е. если мы поменяем 4 и 5 местами, то в базу будет все равно отправлен запрос на обновление колонки позиции по всем секциям?

    • @alekseyevdokimov1895
      @alekseyevdokimov1895  4 ปีที่แล้ว

      Если я все правильно помню то у занятий сплошная нумерация и она не зависит от секций. acts_as_list на самом деле апдейтит позиции всего одним запросом и то только те у которых позиции больше позиции измененного объекта. То есть на самом деле там не очень много запросов получается, можешь в терминале посмотреть когда перетаскивать будешь, если интересно.

  • @handinh1076
    @handinh1076 5 ปีที่แล้ว

    I seems have a error when we create a course because we didn't have course_id it just work when edit course. Could you please confirm it?

    • @alekseyevdokimov1895
      @alekseyevdokimov1895  5 ปีที่แล้ว

      It should work on course creation. Course accepts_nested_attributes_for sections. And on creation section doesn't need course_id.

    • @handinh1076
      @handinh1076 5 ปีที่แล้ว +1

      @@alekseyevdokimov1895
      I have added accepts_nested_attributes_for in model course but it still hasn't created. I comment #validates :course_id, presence: true and it worked. thank for your reply.

    • @alekseyevdokimov1895
      @alekseyevdokimov1895  5 ปีที่แล้ว

      @@handinh1076 yes this validation is not needed.

  • @PozetivTeam
    @PozetivTeam 6 ปีที่แล้ว

    belongs_to автоматически проверяет на наличие id (presence: true уже не нужен)

    • @alekseyevdokimov1895
      @alekseyevdokimov1895  6 ปีที่แล้ว

      С обязательной связью belong_to есть одна тонкость, она подвешивает ошибку на errors[:course], а если у нас есть отдельная форма с селектом, то там будет выбираться атрибут :course_id, таким образом если курс не выбран, то ошибка на курсе не подсветится, и чтобы она подсветилась проще всего добавить валидацию на course_id и тогда она появится на errors[:course_id]. Но в нашем конкретном случае она действительно не нужна, потому что у нас такой формы нет. Здорово, что ты заметил, я у себя поправил!👍

  • @romant4596
    @romant4596 6 ปีที่แล้ว

    У меня после перетаскивания секции в консоле возникает ошибка
    Uncaught TypeError: this.recount_positions is not a function

    • @alekseyevdokimov1895
      @alekseyevdokimov1895  6 ปีที่แล้ว +1

      функция recount_positions определена на глобальном this и чтобы его пробросить в колбэк нужно использовать двойную стрелку =>, проверь что у тебя везде стрелки правильно расставлены, а также что название функций совпадает в обоих местах и все отступы

    • @romant4596
      @romant4596 6 ปีที่แล้ว

      да точно все заработало!!!
      спасибо