調査した事など

直前エントリの_その後 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 によるページめくりは実装できたのでまとめを投入した方が良いかも。