ShootingSter: キャッシュでハマる

新しい付箋紙を2枚も作成されると困るので、イベントの発火元ではJavaScriptの更新をしないように、sessionにMeteorのidを入れていたんだけどうまく動かず。
なんでだろと小一時間頭をひねっていたところ「caches_action :strike」をコメントアウトしたら直った。
セッションの値による動作の分岐がキャッシュで動作してなかったのか。。。


ちなみに、こんな感じで動作を分岐させている。

  def shoot_meteor(javascript, tag)
    Meteor.shoot 'sticky_plus', javascript, [tag] do |meteor|
      session[:meteor_id] = meteor.id
    end
  end

発火元では、Meteorをshootする前にsessionにidを入れておく。

MeteorController#strikeではsessionのMeteor.idをみて、javascriptを空にしたり。

  def strike
    @channel = params[:channel]
    if params[:event].blank?
      meteor_id = session[:meteor_id]
      meteor = Meteor.find(params[:id])
      @javascript = (meteor.id == meteor_id) ? '' : meteor.javascript
    else
      @javascript = %Q[setTimeout(function(){
        meteorStrike[#{@channel.to_json}].event(#{params.to_json});}, 0);]
    end
  end

このへん、ShootingStarの機能で何とかなりそうな気がする。