указывать inverse_of нужно в случае указания нестандартного имени, например если ты указываешь в модели SomeAssociaton - belongs_to :exersice, class_name: 'Lesson', а в модели Lesson - has_many :some_associations без inverse_of: :exercise, то обращение к some_association.exercise создаст запрос к БД, даже если обратная связь уже загружена. В остальных случаях обратная связь определяется автоматически.
В старых рельсах inverse_of нужно было указывать чтобы сократить количество запросов. Например вот такая штука Course.last.lessons[0].course.lessons[0].course без inverse_of делала 5 запросов, а с inverse_of только 2. Тоесть каждый дочерний элемент получал родительский в комплекте и не было необходимости лезть за ним опять в базу. Сейчас в новых рельсах это все работает из коробки и уже нет необходимости его указывать. Но это все так, историческая справка, к счастью это уже знать не обязательно)
Я правильно понимаю, что ява-скрипт каждый раз перенумеровывает весь список секций начиная с 1, а acts_as_list апдейтит сразу все позиции в базе по всем секциям.? Т.е. если мы поменяем 4 и 5 местами, то в базу будет все равно отправлен запрос на обновление колонки позиции по всем секциям?
Если я все правильно помню то у занятий сплошная нумерация и она не зависит от секций. acts_as_list на самом деле апдейтит позиции всего одним запросом и то только те у которых позиции больше позиции измененного объекта. То есть на самом деле там не очень много запросов получается, можешь в терминале посмотреть когда перетаскивать будешь, если интересно.
@@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.
С обязательной связью belong_to есть одна тонкость, она подвешивает ошибку на errors[:course], а если у нас есть отдельная форма с селектом, то там будет выбираться атрибут :course_id, таким образом если курс не выбран, то ошибка на курсе не подсветится, и чтобы она подсветилась проще всего добавить валидацию на course_id и тогда она появится на errors[:course_id]. Но в нашем конкретном случае она действительно не нужна, потому что у нас такой формы нет. Здорово, что ты заметил, я у себя поправил!👍
функция recount_positions определена на глобальном this и чтобы его пробросить в колбэк нужно использовать двойную стрелку =>, проверь что у тебя везде стрелки правильно расставлены, а также что название функций совпадает в обоих местах и все отступы
указывать inverse_of нужно в случае указания нестандартного имени, например если ты указываешь в модели SomeAssociaton - belongs_to :exersice, class_name: 'Lesson', а в модели Lesson - has_many :some_associations без inverse_of: :exercise, то обращение к some_association.exercise создаст запрос к БД, даже если обратная связь уже загружена. В остальных случаях обратная связь определяется автоматически.
В старых рельсах inverse_of нужно было указывать чтобы сократить количество запросов.
Например вот такая штука Course.last.lessons[0].course.lessons[0].course без inverse_of делала 5 запросов, а с inverse_of только 2. Тоесть каждый дочерний элемент получал родительский в комплекте и не было необходимости лезть за ним опять в базу. Сейчас в новых рельсах это все работает из коробки и уже нет необходимости его указывать. Но это все так, историческая справка, к счастью это уже знать не обязательно)
@@alekseyevdokimov1895 это да, но в случае описанном мной выше без inverse_of рельса все так же как и раньше будет генерить лишние запросы
@@superchelll а ну да, понял о чем ты, типа работает из коробки но не всегда. Да наверное так и есть.
Я правильно понимаю, что ява-скрипт каждый раз перенумеровывает весь список секций начиная с 1, а acts_as_list апдейтит сразу все позиции в базе по всем секциям.? Т.е. если мы поменяем 4 и 5 местами, то в базу будет все равно отправлен запрос на обновление колонки позиции по всем секциям?
Если я все правильно помню то у занятий сплошная нумерация и она не зависит от секций. acts_as_list на самом деле апдейтит позиции всего одним запросом и то только те у которых позиции больше позиции измененного объекта. То есть на самом деле там не очень много запросов получается, можешь в терминале посмотреть когда перетаскивать будешь, если интересно.
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?
It should work on course creation. Course accepts_nested_attributes_for sections. And on creation section doesn't need course_id.
@@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.
@@handinh1076 yes this validation is not needed.
belongs_to автоматически проверяет на наличие id (presence: true уже не нужен)
С обязательной связью belong_to есть одна тонкость, она подвешивает ошибку на errors[:course], а если у нас есть отдельная форма с селектом, то там будет выбираться атрибут :course_id, таким образом если курс не выбран, то ошибка на курсе не подсветится, и чтобы она подсветилась проще всего добавить валидацию на course_id и тогда она появится на errors[:course_id]. Но в нашем конкретном случае она действительно не нужна, потому что у нас такой формы нет. Здорово, что ты заметил, я у себя поправил!👍
У меня после перетаскивания секции в консоле возникает ошибка
Uncaught TypeError: this.recount_positions is not a function
функция recount_positions определена на глобальном this и чтобы его пробросить в колбэк нужно использовать двойную стрелку =>, проверь что у тебя везде стрелки правильно расставлены, а также что название функций совпадает в обоих местах и все отступы
да точно все заработало!!!
спасибо