На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > рекурсивное обновление данных
      есть такие таблицы
      ExpandedWrap disabled
        tree(id,name,parent_id,last_update)
        page(id,name,tree_id)

      вот когда редактируется или создается страница(page), нужно пробежаться по всем tree и обновить запись last_update

      могу сделать рекурсией, ничего сложного, но вот может в rails есть возможность автоматически, это делать? как например :dependent => :destroy.
      Сообщение отредактировано: Cepheus -
        Если мне не изменяет память, то такое не возможно по причине того что сам SQL такого не поддерживает.
        :dependent => :destroy. это просто аналог ON DELETE CASCADE для foreign key


        можно повесить callback на before_save, типа если last_update изменился, поменять его еще и у родителя
        тогда автоматом будет происходить
          Цитата XandoX @
          можно повесить callback на before_save, типа если last_update изменился, поменять его еще и у родителя
          тогда автоматом будет происходить


          придется так и делать бежать рекурсивно по всем родителям(т.к. вложенность не ограниченная) и менять
          Сообщение отредактировано: Cepheus -
            дык повесть такой же callback и в Tree и не надо будет специально переберать всех предков
              Собственно такие вещи при помощи коллбэков и делаются. Можешь еще триггер написать для бд.
                XandoX ага действительно, как то не додумался!!!
                Мохнатый сделали бы, чегонить на уровне sql, думаю былоб не дурно
                  в tree повешал коллбек, все работает, правда есть еще одна проблемка
                  есть еще одна таблица

                  page_data(id,text)

                  а в tree добавляется колонка где передается page_data_id
                  так вот как мне правильнее в tree получить page_data_id?
                    ну у тебя в Tree должно быть что-то has_one :page_date, а в PageData belongs_to :tree и тогда ты просто
                    можешь делать @tree.page_data.text
                      XandoX так стоп, при создании новой записи page_data, нужно записать ее tree.page_data_id, а при этим способ, я id pagе_data в tree не получу.
                        Лично я вообще не понял последние пару-тройку сообщений
                          deil видимо, ее тока авторы и могут понимать=))))
                            Похоже на то :)
                              Цитата Cepheus @
                              XandoX так стоп, при создании новой записи page_data, нужно записать ее tree.page_data_id, а при этим способ, я id pagе_data в tree не получу.

                              ага, значит я тебя не правильно понял, я думал что у тебя уже есть там id, а тебе его туда записать надо. ок.
                              ну в любом случаи, то что про связи я сказал верно не совсем верно, по хорошему у тебя в page_data должен быть tree_id, а не наоборот. (вот здесь подробней про связи написано http://rusrails.ru/active-record-associations/the-types-of-associations-1)
                              а что бы их связать делать надо так @tree.build_page_data(:text => "bla-bla-bla")
                                XandoX про связи, это верно!!!
                                Цитата XandoX @
                                по хорошему у тебя в page_data должен быть tree_id

                                да есть, но в tree мне нужно еще и количесво page_id этого tree)
                                вроде что то накидал=)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0691 ]   [ 15 queries used ]   [ Generated: 9.02.23, 00:46 GMT ]