如何覆盖设计控制器?

时间:2013-07-25 21:25:24

标签: ruby-on-rails devise

我的设计SessionController被覆盖:

/ app / 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

但是购物车永远不会被销毁,即使我直接覆盖了破坏方法并在我的代码之后添加了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 为什么我不能在设计控制器中销毁推车? 以及为什么我不能使用视图/客户/会话,如果它说的文件我可以/必须这样做?

谢谢你的阅读。

2 个答案:

答案 0 :(得分:0)

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

enter image description here

答案 1 :(得分:0)

你可以随时尝试

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'}

最后一个问题是:

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

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