忍者ブログ
ブログツール、2007/11/06作成
[43] [42] [41] [40] [39] [38] [37] [36] [35] [34] [33
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

render_componentですよ。

render_componentrequest.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
この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)
この記事へのトラックバック
この記事にトラックバックする:
ついめ~じ
ブログ内検索
フリーエリア
サニーカメラ
Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]