Ruby on Rails 1.2.3 params[:id]で取得した値をsessionに入れて引き回すことができない?
時間がなくて、ちゃんと調べられていないのですが・・・
paramsで取得したパラメータをsessionメソッドを使って以下のような感じで引き回して使いたいと思いました。
class MyController < ApplicationController def action1 session[:hoge1] = 1 session[:hoge2] = params[:id] end def action2 end end
これをViewから呼び出すと
action1.rhtml: <%= session[:hoge1] %> => 1 <%= session[:hoge2] %> => params[:id]の値
と、もちろん値を読むことができます。
しかし、ここで格納されたsessionの値をaction2から再び読もうとすると
action2.rhtml: <%= session[:hoge1] %> => 1 <%= session[:hoge2] %> => local
となってしまいます。コントローラ内で独自に設定した値(ここではhoge1=1)は問題ないものの、paramsの値については読み込むことができません。
ソースを簡単に追ってみたのですが、どうもparamsの値を格納する変数がattr_internalというもので定義されるようになっていて、おそらくセキュリティの関係で他のコントローラ、アクションからは値を参照できないようにしてしまっているようです。時間がなくて具体的な仕組みまでは追いきれていないのですが・・・
仕方ないのでこれらの値はパラメータで引き回すようにしたのですが、この挙動についてはいまだに納得できないところです。sessionを使う意味が根本的になくなってしまいますからね。Railsではsession使うな、ということになるのでしょうか・・・良く考えるとそれはそれでありかもしれないなと少しだけ思えてきたり(笑)
まぁ、ちゃんと色々なケースで試してみたわけでもないので、単に私の勘違いということもあるかもしれません。
追記 2007/8/23
時間ができたのでちょっと詳しく調べてみようと思ったのですが・・・うーん、いまやると再現しないなぁ。環境は変わってないはずなのですが。変わったといえば新しいメモリを1G増やしたくらい。そうか、単にリソース不足だったんだ!・・・んなばかな(^^;
とりあえずこの件は保留