タイトルでかなり説明されています。私は、Ajaxを使用して通知を削除できるようにするビューでcurrent_userがログアウトされるという奇妙な状況に陥っています。私も Ajaxリンクを削除するログアウトcurrent_user
はここで、コントローラclass NotificationsController < ApplicationController
def destroy
@notification = Notification.find(params[:id])
@notification.destroy
respond_to do |format|
format.js
end
end
end
これは、全体のコントローラであるのです...これをデバッグを開始する場所がわからない、何も簡略されません。通知はシステムによって生成されるので、ユーザーが取ることができる唯一のアクションは、通知を「却下」することです。
また、新しいrespond_with
構文を使用してこれを試しても同じ効果がありました。
私はDeviseとRails 3.0.9を使用しています。どのようなアイデアが起こっているか、またはデバッグ方法に関する提案?
- EDIT 1 -
routes.rbを
resources :notifications, :only => [:destroy]
削除]リンク
%span.delete= link_to('dismiss', notification_path(notification), :method => :delete, :remote => true)
- EDIT 2 -
まあ、私は新しい何かに気づきましたログ - 下記の****を参照してください。だから、そこにそれがある、それはユーザーテーブルの一部のように見えます
Started DELETE "/notifications/10" for 127.0.0.1 at 2011-06-21 21:47:15 -0500
Processing by NotificationsController#destroy as JS
Parameters: {"id"=>"10"}
SQL (0.4ms) SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
SQL (0.3ms) SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Slug Load (0.4ms) SELECT "slugs".* FROM "slugs" WHERE ("slugs".sluggable_id = 1 AND "slugs".sluggable_type = 'User') ORDER BY id DESC LIMIT 1
****AREL (0.3ms) UPDATE "users" SET "remember_token" = NULL, "remember_created_at" = NULL, "updated_at" = '2011-06-22 02:47:15.913839', "preferences" = '---
:email_notifications: ''true''
' WHERE "users"."id" = 1
Notification Load (0.2ms) SELECT "notifications".* FROM "notifications" WHERE "notifications"."id" = 10 LIMIT 1
User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
AREL (0.3ms) UPDATE "users" SET "notifications_count" = COALESCE("notifications_count", 0) - 1 WHERE "users"."id" = 1
AREL (0.1ms) DELETE FROM "notifications" WHERE "notifications"."id" = 10
Rendered notifications/destroy.js.erb (0.7ms)
Completed 200 OK in 6416ms (Views: 9.6ms | ActiveRecord: 4.1ms)
は、セッションを終了するために、特に私は疑うremember_tokenが工夫をトリガされ、nullに設定なっている、または多分これは後に工夫することによって行われセッションが破棄されました。しかし、私はそれをどのように追跡するのですか?
私が考えることができる唯一のことは、通知とユーザーとのやりとりを引き起こす可能性があることです。ユーザにはnotifications_count
のcounter_cache
があります。
デバッグ方法に関するご意見とご感想をお寄せいただきありがとうございます。
- EDIT 3 -
ルビー・デバッグで掘った後、それは問題が工夫する関連しているように見えるrails.jsスクリプトに変更。参照:
https://github.com/plataformatec/devise/issues/913
https://github.com/ryanb/cancan/issues/280
私はそれらのスレッド上での提案のいくつかを試していると私は解決策を見つけた場合掲載します。
あなたはどのドライバとバージョンを使用していますか?私は同じ問題を抱えています(ナッツを動かす!)、それはjquery-ujs v。1.0.12で修正されていません。また、Devise 1.3.4を実行していますありがとう! – Chris
'devise(1.4.0)'と 'jquery-rails(1.0.12)' – Andrew
を使って@Chris、私は1.4.0に変更しましたが、ダイスはアップグレードしませんでした。デバッグボードに戻る.. – Chris