2015-11-12 27 views
5

iki denetleyicileri tarafından paylaşılan yöntemler, yani 1) carts_controller 2) orders_controllerRails4: Birden çok kontrol

class CartsController < ApplicationController 
    helper_method :method3 

    def method1 
    end 

    def method2 
    end 

    def method3 
    # using method1 and method2 
    end 
end 

Not: method3method1 ve method2 kullanıyor. CartsController, method3 kullanan ve düzgün çalışan showcart.html.erb görünümüne sahiptir.

Şimdi sipariş görünümünde, arabayı (showcart.html.erb) görüntülemem gerekiyor, ancak yardımcı method3carts_controller'da tanımlandığı için erişemiyor.

Nasıl düzeltilir?

cevap

19

için arasında paylaşım kod önerilen yol erişilebilir olacak senin Denetleyiciler Denetleyici Endişeleri kullanmaktır. Denetleyici Endişeleri, aralarındaki kodu paylaşmak için kontrolörlere karıştırılabilen modüllerdir. Bu nedenle, denetleyici ile ilgili olarak ortak yardımcı yöntemleri kullanmalı ve yardım yöntemini kullanmanız gereken tüm denetleyicilerinizde endişe modülünü dahil etmelisiniz. Sizin durumunuzda, method3'u iki denetleyici arasında paylaşmak istediğinizde, bir sorunla karşı karşıya bırakmalısınız. Endişelerin nasıl oluşturulacağını ve denetleyiciler arasında kod/yöntemlerin nasıl paylaşılacağını öğrenmek için bkz. this tutorial. Sonra

# 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 

denetleyicileri de endişe şunlardır:

Eğer endişe kontrolör tanımlayın: Burada

gidiyorsun yardımcı olacak bazı kodlardır Şimdi

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

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

, şunları yapmalısınız method3 her iki denetleyicide de kullanılabilir.

+1

Teşekkürler Rakibul. İşe yarıyor. Ancak, benim durumumda, CartsControllerConcern içine method1 & 2 eklemem gerekiyor. Bugün yeni bir şey öğrendim :) – Khoga

0

Geçerli denetleyicide örneklenmediğinden, diğer denetleyici yöntemlerini kullanamazsınız. Eğer Rails 4 kullandığınız gibi her iki denetleyicileri (veya ApplicationController) ana sınıfına

taşı her üç yöntem ya da bir yardımcı için, bu yüzden, hem

+0

Teşekkürler Vasfed. Yardımcı ve Uygulama da çalışıyor. – Khoga

İlgili konular