新しい付箋紙を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の機能で何とかなりそうな気がする。