render_componentですよ。
render_componentの
request.xhr?
が
trueで
ないことがあるということ。
つまり、render_componentで呼び出されたアクションのレンダリングについて、
レイアウトを考慮するかしないかの判断がつけられない、
ということです。
そんなもん決めうちにしとけばええやん、と思うかもしれませんが、
起きた現象というのは(てか、とっくにおきてたんだけど気がつかなかった)
こんなかんじ
多機能なWEBアプリを作っておいて、
いろんな機能のサマリーとかをポータルに配置したい、とか思うと、
render_componentは非常に便利。
というわけで、機能毎にコントローラを分けて、
ポータルからはrender_componentで内容を表示させる。
大量のrender_componentが呼ばれると、
ポータルの表示が遅くなる欠点は確かに否めないけれど、
その辺のコードは全て機能側に集約できるので、
ポータルの方はレイアウトとか、そういうのに集中できて助かる。
で、本来は表示できない(権限を細かく分けているので権限外)な
コンポーネントを表示したときに、
「みれれません」ページを表示したいとする。
権限処理は全て機能に集約しているので、
機能側のコントローラで判別したい。
となれば、before_filterで権限判定を行って、
ダメなら「みれれません」ページをレンダリングするのが普通。
どの機能にも同じような処理があれば、
権限判定は機能側コントローラでやって、「みれれません」ページのレンダリング処理は
AppricationControllerに配置するのが吉。
しかも、Ajaxアクセスか、普通のアクセスかでレイアウトを考慮しなければならないなら、
request.xhr?でrender :actionか:partialを選んであげればいい。
普通にリクエストを発してきたアクセスに関しては、
フォーム経由だろうが、link_toだろうが、link_to_remoteだろうがどんと来い状態。
しかし、render_componentの時は、request.xhr?常にtrueじゃないので、
使えない。
どういう事かというと、
render_componentは呼び出し元リクエスト
(つまり、render_componentを記述しているrhmlファイルとかを呼び出したリクエスト)
のrequestを元に、新しいrequestを生成して対象のアクションを呼び出している。
このため、render_componentのrequest.xhr?は
呼び出し元リクエストのrequest.xhr?と同じものを返してきてしまう。
つーか、render_componentって、非同期呼び出し以外で利用されんのか?
という疑問が。
気がつけばrails2.2では非推奨になってるし。
なんか別の方法を考えないとね。
出来ればそれぞれ別のタイミングでレンダリング処理してほしいから、
やっぱりJavascriptで改めてアクション呼ぶのがいいのかしらん。
PR