rails对具有空自引用关联的模型执行两次动作

时间:2010-11-10 03:57:18

标签: ruby-on-rails rendering self-reference

我对此感到非常困惑。我怀疑任何人都可以直接告诉我这个问题是什么,但任何建议调试和调查的方法的答案都会非常感激 - 我已经尝试将一些调试调用放入控制器,而没有太多运气跟随路径通过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

还有一些验证确保这些不能嵌套多个深度 - 即,集合可以有父集合,或者它可以有子集合,而不是两者。

如果Collection没有子节点 - 即,它是子集合或者它是独立集合 - 那么该集合下的任何操作都会呈现两次。换句话说:

为包含子项的集合重新加载展示页面:

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)

同样的事情发生在所有其他嵌套资源(其中有一堆) - 例如/ collections / [集合名称] / profile,/ collections / [集合名称] / works,/ collections / [集合名称] / people - 如果集合中有子节点,则所有操作都会呈现一次并返回。否则,它们会渲染两次。

注意 - 浏览器显示第一个渲染的结果,但浏览器状态栏仍显示“等待”,直到第二个渲染完成,但它不会重绘屏幕,至少在Firefox或Safari中。

我已经创建了一个具有相同结构的测试应用程序(对于模型使用相同名称的“集合”,以防万一),并且错误不重复。

就像我上面所说 - 任何想法甚至如何调试这将是非常感激的。

0 个答案:

没有答案