我对这个很困惑。我怀疑任何人都能马上告诉我问题是什么,但是任何建议调试和研究这一问题的方法的答案都会让我非常感激——我试着在控制器中加入一些调试调用,却没有太多的运气沿着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)
注意--浏览器显示第一次渲染的结果,但浏览器状态栏仍显示“等待”直到第二次渲染完成,但它不会重新绘制屏幕,至少在Firefox或Safari中是这样。
我已经创建了一个具有相同结构的测试应用程序(为模型使用相同的名称“collection”,以防这是wonkiness的来源),并且错误不会重复。