Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



render_partial の不思議

2011年01月19日 19:22更新 筆者:K.Ktouth

たのしいRuby 第3版(AA)

ページの一部にAJAXを使ってカレンダー機能をつけようとしてちょっと困ったこと。

トップページ(MainController)のビューファイルに....

<%= render_partial('/test/ok') %>

と埋め込むとビューディレクトリの該当ファイルが挿入される。その際対応するコントローラ経由で呼ばれるわけではない=インスタンス変数などは元々のコントローラ(この場合は MainController)のアクションメソッドで設定されたものが使用可能
ここまではいいとして。

AJAX でのアクセスに対してレスポンスを返すためのコントローラ(RestController)のアクションメソッドで render_partial('/test/ok') とするとエラーが発生するのは、どうも仕様っぽい。
調べた結果、Ramaze(Innate) はレンダリングおよび URI 生成は必ず基点となるコントローラに map で設定されたURI以下のもののみしかアクセス出来ず、絶対パスや上位ディレクトリなどの相対指定は出来ない模様。
MainController では map を '/' と指定していたため、たまたま成功していただけっぽい。

となると下位ではない他のディレクトリにあるビューを指定出来ないため、非常に困る……と思って調べたところ。

<%= RestController.render_partial('/test/ok') %>

という書き方であっさり成功するらしい orz
きちんとドキュメントを全部読まないといけないのかぁ……めんどい(ぉあせ

本日のリンク元
アンテナ
その他のリンク元
検索