2015-11-12 85 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