Как сохранить информацию в модели на Devise.sessions#destroy?
Я использую Devise и Piggybak для проекта Rails, а Piggybak использует cookie с именем cart для хранения пользовательской корзины. Проблема в том, что Piggybak не уничтожает cookie для пользователя sign_out, поэтому, если я регистрируюсь с другим пользователем, он использует тот же cookie и, следовательно, ту же корзину.
Я хочу разрешить сохранение этого значения cookie в моей пользовательской модели, чтобы оно могло вернуть свою корзину в другой вход. Я переопределил метод Devise.sessions # destroy, чтобы сохранить значение cookie для пользователя и уничтожить cookie:
# app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
def destroy
current_user.add_cart_cookie(cookies['cart']['value'])
cookies['cart'] = { value: '', path: '/' }
super
end
end
Маршрутизация прямо на маршрутах:
# config/routes.rb
...
devise_for :users, controllers: { sessions: 'users/sessions' }
...
И создание метода add_cart_cookie
к моей модели пользователя:
# app/models/user.rb
class User < ActiveRecord::Base
...
def add_cart_cookie(value)
self.cart_cookie = value
end
...
end
Но это не работает, оно уничтожает cookie, но не сохраняет его в пользовательской модели. Почему это происходит?
1 ответ
Сделал это, спасибо @Marian.
Что я сделал, так это поменял add_cookie_cart
способ принять другой параметр:
# app/models/user.rb
class User < ActiveRecord::Base
...
def add_cart_cookie(value, password)
self.cart_cookie = value
self.password = password
self.password_confirmation = password
self.save
end
...
end
И изменил мой сеанс # уничтожить соответственно:
class Users::SessionsController < Devise::SessionsController
def destroy
current_user.add_cart_cookie(cookies['cart']['value'], current_user.password)
cookies['cart'] = { value: '', path: '/' }
super
end
end