2015-11-12 59 views
5

我有两个控制器共享,即 1)carts_controller 2)orders_controllerRails4:方法由多个控制器

class CartsController < ApplicationController 
    helper_method :method3 

    def method1 
    end 

    def method2 
    end 

    def method3 
    # using method1 and method2 
    end 
end 

注:method3是使用method1method2CartsControllershowcart.html.erb视图这是使用method3并正常工作。

现在为了查看,我需要显示购物车(showcart.html.erb),但由于帮手method3carts_controller中定义,所以无法访问它。

如何解决?

回答

19

当你正在使用Rails 4,共享代码中推荐的方式你控制器将使用Controller Concerns。 Controller Concerns是可以混合到控制器中以在它们之间共享代码的模块。所以,你应该把常用的辅助方法放在控制器的关注点中,并且在你需要使用辅助方法的所有控制器中包含关注模块。

在你的情况下,你想分享两个控制器之间的method3,你应该把它放在一个问题上。请参阅this tutorial了解如何在控制器之间建立关注点和共享代码/方法。

这里有一些代码,以帮助你去:

定义你控制器的担忧:

# app/controllers/concerns/your_controller_concern.rb 
module YourControllerConcern 
    extend ActiveSupport::Concern 

    included do 
    helper_method :method3 
    end 

    def method3 
    # method code here 
    end 
end 

然后,包括在控制器的关注:

class CartsController < ApplicationController 
    include YourControllerConcern 
    # rest of the controller codes 
end 

class OrdersController < ApplicationController 
    include YourControllerConcern 
    # rest of the controller codes 
end 

现在,你应该能够在两个控制器中使用method3

+1

谢谢Rakibul。有用。但是,在我的情况下,我还需要在CartsControllerConcern中添加method1&2。今天学到了一件新事物:) – Khoga

0

您不能使用其他控制器的方法,因为它没有在当前请求中实例化。

移动所有三种方法父类的两个控制器(或ApplicationController中),还是要一个帮手,所以他们会都可以访问

+0

谢谢Vasfed。助手和应用程序也起作用。 – Khoga