調査した事など
直前エントリの_その後 3_以降の記述が真かどうかを確認してみました。
コントローラのインスタンス変数
integration な試験を以下のような感じで実行してみた。
test/integration/instance_variable_test.rb
require File.dirname(__FILE__) + '/../test_helper' class CalendarTest < ActionController::IntegrationTest def test_before_next open_session do |sess| get "/" p assigns(:year) get "/calendar/xxx" p assigns(:year) get "/calendar/before/" p assigns(:year) end end end
assert ないケド良しとする (を)。実行したら以下な感じ。
$ ruby test/integration/instance_valiable_test.rb Loaded suite test/integration/instance_valiable_test Started 2006 2006 nil . Finished in 0.395085 seconds. 1 tests, 0 assertions, 0 failures, 0 errors $
二番目のリクエストで出力されてるのは、session から代入してるからです。こんな感じで。
def xxx @year = session[:year] @month = session[:month] @databinder = getDatabinder render :action => 'index' end
結論としては、コントローラのインスタンス変数 (一部を除く) は view にデータを引き渡すために、あるという事ですね。
lambda が返却する値を session に格納してはいけないのか
これはダウトっぽい。config/routes.rb が微妙だっただけではないかと。動作確認にあたってはコントローラを修正する必要がありますが、やってみます。
修正分を一部のみ引用。
def index @year = session[:year] = @params[:year].to_i @month = session[:month] = @params[:month].to_i @databinder = session[:databinder] = getDatabinder end def xxx @year = session[:year] @month = session[:month] @databinder = session[:databinder] render :action => 'index' end def before session[:year] = (session[:month] == 1 ? session[:year] - 1 : session[:year]) session[:month] = (session[:month] == 1 ? 12 : session[:month] - 1) render :partial => 'cal', :locals => { :year => session[:year], :month => session[:month], :databinder => session[:databinder] } end
あらまー。いきなり index アクション実行にいきなり nil だし。p してみたら全て nil です。index アクションのみ以下のように元に戻してみます。
def index @year = session[:year] = @params[:year].to_i @month = session[:month] = @params[:month].to_i @databinder = getDatabinder end
あららー。試験通っちゃったし。データが無いケースもあるから databinder は nil でも通るのかな (適当)。この挙動を見る限りでは session に lambda の戻りを設定しない方が良い、という事なのかなぁ。
ちなみにここでの結論は挙動を元にしたものですので、根拠までアクセスしておりません。rails のバージョンは 1.1.2 です。svn から最新持ってきた方が良いのだろうか。でも今使ってるのって、8 月頭くらいに svn trunk から落としたヤツのはずなんですが。
カレンダが小さくなっていく問題について
困った。link_to_remote に渡す情報が足らないのかなぁ。さすがに面倒くさくなってきた。ってか、XMLHttpRequest 使う必要は無いと思う。でも手は動くんだよね。仕事だったらとっとと却下なんですが。(でも半分くらい仕事かも)
基本的に置き換えのはずなのに小さくなっているって??と思い、calendar_helper.rb で以下のようになっていた部分を
<table class="#{options[:table_class]}" id="#{options[:table_class]}" >
以下のようにしたら直りました。
<div id="#{options[:table_class]}" > <table class="#{options[:table_class]}" >
id 属性は div とか span で囲め、が格言ッスか。
コンテンツが更新される速度自体は link_to よりは link_to_remote の方がナニですね。とりあえず便秘なナニがすっりした気分。ようやく先に進めるのですが、何しましょうかね。(こら
しかし、情報をバケツに入れまくっちゃえ、なイキオイで情報を投入してるんですが、だんだん自分で見てもワケワカな状態になりつつあるぞ。とりあえず link_to_remote によるページめくりは実装できたのでまとめを投入した方が良いかも。