2016-03-30 9 views
0

Etkin bir kayıt modelinde, seçeneklerimizi gereksinimlerimize göre ayarladıktan sonra serializable_hash yöntemini geçersiz kılıyor ve super options numaralı telefonu arıyoruz.serializable_hash super, overridden yöntemimde tanımlanan seçenekleri nasıl alır?

Genellikle yapın:

def serializable_hash options=nil 
    options ||= { 
     only: [ 
     :id, 
     :special_instructions 
     ], 
     include: { images: nil }, 
     methods: [:catalog_item_name, ] 
    } 
    super options 
    end 

Ama modellerinden birini

, yanlışlıkla, biz süper yönteme açıkça options geçen değil idi. Yine de, sanki seçenekleri geçiyormuş gibi çalışıyor gibi görünüyor.

serializable_hash source code okunduktan sonra, seçeneklerin süper yöntemde düzgün bir şekilde başlatılması için herhangi bir neden bulamıyoruz.

Bunun nasıl olduğuna dair ipuçları var mı? Doğal olarak, bir ruby ​​komut dosyasındaki yapının yeniden üretilmeye çalışılması, aynı şekilde gerçekleşmesini sağlamaz gibi görünmektedir. (

module MyModule 
    def my_module_method options=nil 
    options ||= { test: 'Test' } 
    end 
end 

class MyTest 
    include MyModule 

    def my_module_method 
    options = { bingo: 'Bingo!' } 
    super 
    end 
end 

puts MyTest.new.my_module_method 

Bu { test: 'Test' } yazdırır ve biz (super options) seçenekleri geçmesi halinde, Dan

cevap

2

(biz bekleyebileceğiniz) { bingo: 'Bingo!' } yazdırır: Burada biz de denemek yazdım budur oldukça eski) pickaxe book (AKA Programming Ruby): Eğer hiçbir argüman olmadan super çağırdığınızda, Ruby geçerli yöntem olarak aynı adı taşıyan bir yöntemi çağırmak için soran akım nesnenin üst bir mesaj gönderir

, ve geçerli yönteme geçirilen parametreleri geçirerek.

Yani bu verilen: D#m için x bağımsız değişken m ana sürümü için herhangi bir açık argümanları dont'kaynağı super yılında örtülü olduğu için 6 göreceksiniz

class C 
    def m(x) 
    puts x 
    end 
end 
class D < C 
    def m(x) 
    super 
    end 
end 
D.new.m(6) 

.

MyTest#my_module_method tanımına bir bağımsız değişken ekleyin ve bir şey göreceksiniz.

İlgili konular