代码之家  ›  专栏  ›  技术社区  ›  shalott

具有空自引用关联的模型的rails两次呈现操作

  •  1
  • shalott  · 技术社区  · 14 年前

    我对这个很困惑。我怀疑任何人都能马上告诉我问题是什么,但是任何建议调试和研究这一问题的方法的答案都会让我非常感激——我试着在控制器中加入一些调试调用,却没有太多的运气沿着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的来源),并且错误不会重复。

    0 回复  |  直到 14 年前