私はこれにかなり困惑しています。誰もが問題が何であるかをすぐに教えてくれるとは思えませんが、これをデバッグして調査する方法を提案する答えは大歓迎です-私はパスをたどるのにあまり運がなくても、いくつかのデバッグ呼び出しをコントローラーに入れてみましたRailsの根性を通して、調査するソースのどこへのポインタが素晴らしいでしょう。
これは、Ruby 1.8.7 /Rails2.3.5とRuby1.9.2/Rails3.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
これらが複数の深さでネストできないことを保証する検証もあります。つまり、コレクションは親コレクションを持つことも、子コレクションを持つこともできますが、両方はできません。
コレクションに子がない場合(つまり、サブコレクションであるかスタンドアロンコレクションである場合)、そのコレクションの下のアクションは2回レンダリングされます。言い換えると:
子供がいるコレクションのショーページを1回リロードします。
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)
子のないコレクションのショーページを1回リロードします。
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 --コレクションに子がある場合、アクションはすべて1回レンダリングされ、戻ります。それ以外の場合は、2回レンダリングします。
注-ブラウザには最初のレンダリングの結果が表示されますが、ブラウザのステータスバーには、2番目のレンダリングが完了するまで「待機中」と表示されますが、少なくともFirefoxまたはSafariでは画面が再描画されません。
同じ構造のテストアプリを作成しました(これが奇抜さの原因である場合に備えて、モデルに同じ名前の「コレクション」を使用します)。エラーは再現されません。
私が上で言ったように-これをデバッグする方法でさえどんなアイデアでも大いに感謝されるでしょう。