2013-07-25 127 views
0

我有色器件SessionController overwrited:如何覆盖设计控制器?

上的应用程序/控制器/客户/ 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

只反映了变化

my routes.rb是:

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

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

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

感谢您的阅读。

回答

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

最后一个问题是:

“w我不能使用视图/客户/会话,如果它说我可以/不得不这样做的文档? “

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

0

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

enter image description here

+0

谢谢你,但它不是,这是一个mistke,我没有当我在这里写了代码。 – user2382595