рельсы рендеринга действий дважды для модели с пустой самоссылочной ассоциацией - PullRequest
1 голос
/ 10 ноября 2010

Я довольно озадачен этим.Я сомневаюсь, что кто-то может сразу сказать мне, в чем проблема, но любые ответы, предлагающие способы отладки и исследования этого, будут высоко оценены - я попытался ввести некоторые отладочные вызовы в контроллер без особой удачи в следовании путичерез кишки Rails, так что указатель на то, где в источнике для исследования будет здорово.

Это происходит как в Ruby 1.8.7 / Rails 2.3.5, так и в Ruby 1.9.2 / Rails 3.0.1.

У меня есть следующая модель:

class Collection < ActiveRecord::Base
  has_one :collection_profile, :dependent => :destroy

  belongs_to :parent, :class_name => "Collection"
  has_many :children, :class_name => "Collection", :foreign_key => "parent_id"
end

со следующим маршрутом:

resources :collections do
  resource  :collection_profile
  resources :collections
end

Существует также некоторая проверка, которая гарантирует, что они не могут быть вложены больше, чемодин глубокий, т. е. коллекция может иметь родительскую коллекцию или иметь дочерние коллекции, но не обе.

Если коллекция не имеет дочерних элементов, т. Е. Является ли она вложенной коллекцией или является отдельной коллекцией, то любые действия в этой коллекции выполняются дважды.Другими словами:

Повторная загрузка страницы показа для Коллекции без детей:

Started GET "/collections/TheFirstCollection" for 127.0.0.1 at 2010-11-09 20:55:07 -0500
...
Rendered collections/show.html.erb within layouts/application (1708.9ms)
Completed 200 OK in 1784ms (Views: 1706.0ms | ActiveRecord: 34.3ms)

Повторная загрузка страницы показа для Коллекции без детей:

Started GET "/collections/SecondCollection" for 127.0.0.1 at 2010-11-09 20:56:48 -0500
...
Rendered collections/show.html.erb within layouts/application (637.3ms)
Completed 200 OK in 921ms (Views: 654.6ms | ActiveRecord: 13.7ms)

Started GET "/collections/SecondCollection" for 127.0.0.1 at 2010-11-09 20:56:55 -0500
...
Rendered collections/show.html.erb within layouts/application (828.6ms)
Completed 200 OK in 906ms (Views: 843.8ms | ActiveRecord: 14.9ms)

То же самоеэто происходит для всех других вложенных ресурсов (из которых есть группа) - например, / collection / [имя коллекции] / профиль, / collection / [имя коллекции] / works, / collection / [имя коллекции] / people -если у коллекции есть дочерние элементы, все действия отображаются один раз и возвращаются.В противном случае они рендерится дважды.

Примечание. Браузер отображает результаты первого рендера, но в строке состояния браузера по-прежнему отображается «ожидание» до завершения второго рендера, но он не перерисовывает экран, по крайней мере в Firefox или Safari.

Я создал тестовое приложение с той же структурой (используя одно и то же имя «коллекция» для модели на случай, если она была источником неожиданности), и ошибка не повторяется.

Как я уже говорил выше - любые идеи, даже как отладить это, будут очень благодарны.

...