2

存在することを確認し、存在しない場合は session[:event_id]リダイレクトするbefore_filterがあります。にajax呼び出しを送信します。 次に、インデックスを設定してリダイレクトします。問題は、フィルターが呼び出されたときにフィルターがないことです。何が起こっている?select_eventselect_eventchoose_event_by_keycodechoose_event_by_keycodesession[:event_id]check_event_permissionssession[:event_id]

before_filter :check_event_permission, :except => [:select_event, :choose_event_by_keycode]

def check_event_permission
  puts "@!@@@@@@@@@@@@@@@@@@@@@@@"
  puts session
  puts "@!@@@@@@@@@@@@@@@@@@@@@@@"
  redirect_to :action =>'select_event' if !session[:event_id]
end     

def choose_event_by_keycode
  @event = Event.find_by_keyCode(params[:keyCode])
  if @event
    current_user.add_to_event_as_patron(@event.id)
    session[:event_id] = @event.id
    puts "!!@@@@@@@@@@@@@@@@@@@@@@@"
    puts session
    puts "!!@@@@@@@@@@@@@@@@@@@@@@@"
    redirect_to mobile_path
  else
    render 'select_event', :notice => "No event found with that key.", :layout => false
  end
end   

サーバーログ(わかりやすくするために空白を変更し、プット出力を移動して、操作順に表示するようにしました):

Started GET "/mobile/choose_event_by_keycode?keyCode=12345" for 192.168.5.101 at 2012-05-01 12:29:53 -0400
Processing by MobileController#choose_event_by_keycode as */*
  Parameters: {"keyCode"=>"12345"}
  Event Load (0.1ms)  SELECT `events`.* FROM `events` WHERE `events`.`keyCode` = '12345' LIMIT 1
  User Load (0.1ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  EventPatron Load (0.0ms)  SELECT `event_patrons`.* FROM `event_patrons` WHERE     `event_patrons`.`user_id` = 1 AND `event_patrons`.`event_id` = 1
!!@@@@@@@@@@@@@@@@@@@@@@@
{"session_id"=>"ea0a0930f7723719d5c29c722ab3d1ed", "_csrf_token"=>"jzhMJcs2lcsGc9LFZi5PhJbGRG1mTrznFeawWHdUOHk=", "user_id"=>1, "user_type"=>"super", "event_id"=>1}
!!@@@@@@@@@@@@@@@@@@@@@@@
Redirected to http://192.168.5.205:3000/mobile
Completed 302 Found in 259ms (ActiveRecord: 6.3ms)


Started GET "/mobile" for 192.168.5.101 at 2012-05-01 12:29:54 -0400
Processing by MobileController#index as */*
@!@@@@@@@@@@@@@@@@@@@@@@@
{"session_id"=>"ea0a0930f7723719d5c29c722ab3d1ed", "_csrf_token"=>"jzhMJcs2lcsGc9LFZi5PhJbGRG1mTrznFeawWHdUOHk=", "user_id"=>1, "user_type"=>"super"}
@!@@@@@@@@@@@@@@@@@@@@@@@
Redirected to http://192.168.5.205:3000/mobile/select_event
Filter chain halted as :check_event_permission rendered or redirected
Completed 302 Found in 1ms (ActiveRecord: 0.0ms)

session[:event_id]ログから、が正常に設定されていることがわかりますがchoose_event_by_keycode、その後消えますcheck_event_permission

アップデート

問題を見つけました。これは、ログアウトして再度ログインした場合にのみ発生していたことがわかりました。ログアウト機能では、次のようになりました。

reset_session
session[:user] = nil

なぜsession[:user] = nilそこにいたのか私に聞かないでください。しかし、私はそれを削除し、すべてが正常に機能しました。SOOOO、質問は今Why did having session[:user] = nil cause the observed behavior?

4

1 に答える 1

0

ルートを変更したと思いますが、そうでない場合は choose_event を表示していないためですchoose_event_by_keycodeGET "/mobile/choose_event?keyCode=12345"

また、あなたの@eventもありますか?空白か何かの場合....設定すると、それが変更されます。puts @event.id多分あなたのputs声明のどこかに追加してください...確認するためだけに。

/mobile見た目は?確かに、何かが足していません。

これは実際の db 列名ですか? keyCode#奇妙な。

于 2012-05-01T17:36:15.100 に答える