0

我已经覆盖了设计 SessionController:

在 app/controllers/customers/sessions_controller.rb

class Customers::SessionsController < Devise::SessionsController
    before_filter :destroy_cart, only: :destroy
    def destroy_cart
        cart = Cart.find(current_client.cart.id)
        cart.destroy
    end 

end

但是购物车永远不会被破坏,即使我直接覆盖destroy方法并super在我的代码之后添加,购物车仍然存在,在数据库中(我知道我可以只创建一次购物车并在用户再次登录时获取它或在他第一次使用该应用程序时创建一个新应用程序,但我现在想尝试这种方式),就像没有在那个 SessionController 上阅读我的代码一样。

出于某种原因,即使我有这种看法:

app/views/customer/registrations

我对该视图所做的更改仅在我将其更改为时才会反映

app/views/devise/registrations

我的 routes.rb 是:

devise_for :clients, :controllers => { sessions: 'customers/sessions'}

devise_scope :client do 
    root to: "customers/Sessions#new"
end

我与设计一起使用的模型是Client 为什么我不能在设计控制器中销毁购物车?如果文档说我可以/必须这样做,为什么我不能使用视图/客户/会话?

谢谢你的阅读。

4

2 回答 2

1

你总是可以尝试做

def destroy
  cart = Cart.find(current_client.cart.id)
  cart.destroy
  super
end

但首先您可能要确保您真正正确地覆盖了设计的控制器。

您看不到更改的原因app/views/customer/registrations是因为您似乎只覆盖了:sessions控制器,因此您需要更改

devise_for :clients, :controllers => { sessions: 'customers/sessions'}

devise_for :clients, :controllers => { registrations: 'customers/registrations', sessions: 'customers/sessions'}

最后一个问题是:

“如果文档说我可以/必须这样做,为什么我不能使用视图/客户/会话?”

您在这里有一个错字,您使用的是customers命名空间,而不是customer在 routes.rb [ sessions: 'customers/sessions'] - 只是一个错字?

于 2013-08-05T10:47:35.213 回答
0

注意你的拼写。before_filter正在调用一个不存在的方法。

在此处输入图像描述

于 2013-07-25T21:31:11.617 回答