Название в значительной степени объясняет это. У меня возникла странная ситуация, когда представления, которые позволяют пользователям удалять уведомления с помощью 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. Любая идея, что может продолжаться, или предложения о том, как отлаживать
- ИЗМЕНИТЬ 1 -
routes.rb
resources :notifications, :only => [:destroy]
Удалить ссылку
%span.delete= link_to( 'dismiss', notification_path(notification), :method => :delete, :remote => true )
- ИЗМЕНИТЬ 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)
Итак, вот оно, похоже, что часть таблицы пользователей получает значение null, особенно mem_stoken, который, как я подозреваю, запускает Devise для завершения сеанса, или, может быть, это выполняется Devise после завершения сеанса. Но как я могу отслеживать это?
Единственное, что я могу думать о том, что вызывает взаимодействие с пользователями, есть counter_cache
для пользователей для notifications_count
.
Я ценю мысли и предложения о том, как отлаживать!
- ИЗМЕНИТЬ 3 -
После копания ruby-debug похоже, что проблема связана с Devise и изменениями в rails.js script. См:
https://github.com/plataformatec/devise/issues/913
https://github.com/ryanb/cancan/issues/280
Я пробую некоторые предложения по этим темам и опубликую, если найду решение.