2012-05-01 28 views
11

Önce_filterin sadece Rails içindeki kontrolörler için olduğunu biliyorum, ancak model için böyle bir şey isterim: modelimdeki herhangi bir yöntem çağrıldığında, çağrılan yöntemin çalıştırılıp çalıştırılmayacağını belirleyen bir yöntem çalıştırmak istiyorum . Kavramsal olarak, böyle bir şey: Ben @ website.method1 çağırdığınızdaRaylar modeli "before_filter"?

class Website < ActiveRecord::Base 
    before_filter :confirm_company 

    def confirm_company 
    if self.parent.thing == false? 
     return false 
    end 
    end 

    def method1 
    #do stuff 
    end 

end 

Yani, ilk confirm_company arayacak ve ben return false eğer method1 yayınlanmaz. Rayların böyle bir işlevi var mı? Ben bu çalışacaktır gerçekten emin değilim ben sadece

+1

ortalama [Active kayıt Callbacks] (http://guides.rubyonrails.org/active_record_validations_callbacks.html#callbacks-overview)? – Mischa

+0

Evet, ihtiyacım olan şey, sanırım. Ancak, mevcut geri aramaların hiçbiri peşindeyken yapamaz. Tasarruf etmem, doğrulamayı, intikam etmeyi ... Bir yöntemi arıyorum. –

+0

bir proxy nesnesini kullanabilir ve durumunuz – apneadiving

cevap

12
class MyModel 
    extend ActiveModel::Callbacks 
    define_model_callbacks :do_stuff 

    before_do_stuff :confirm 

    def do_stuff 
     run_callbacks :do_stuff do 
      #your code 
     end 
    end 

    def confirm 
     #confirm 
    end 
end 

... Burada bariz bir şey üzerinde eksik ediyorum umuyoruz, ama şimdi gerçekten zamanım yok gibi, bunu deneyebilirsiniz. Şuna bir göz at: http://api.rubyonrails.org/classes/ActiveModel/Callbacks.html

+0

Bu, tam olarak belirttiğiniz gibi çalışır. Her modele dokunmamı gerektiriyor, ama düşünülen her şey çok temiz bir çözüm. Çok teşekkürler! –

+0

Harika :) Modellerinizde yinelenen desenler varsa, parçaları modüllere ayırmayı düşünebilirsiniz. Sadece bir düşünce. – Robin