2013-02-18 8 views
8

, ben * ne yapar bu`Bir param olarak kullanılırken *` anlamı (gibi değil * arg, sadece *)

def save(*) 
    create_or_update || raise(RecordNotSaved) 
end 

bulundu? : *args gibi kullandığımızda ne olduğunu biliyorum, ancak bu durumda sadece * no'lu düz.

bu özel durumda ref https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb#L119

+2

http://stackoverflow.com/questions/7531990/what-does-a-single-splat-asterisk-in-a-ruby-argument-list-mean – bullfrog

+0

@bullfrog thx! : D –

cevap

2

, kaydetme herhangi bir bağımsız değişken almaz. Çıplak uyarıyla olan şey budur.

https://github.com/rails/rails/blob/v3.1.3/activerecord/lib/active_record/validations.rb#L47

# The validation process on save can be skipped by passing <tt>:validate => false</tt>. The regular Base#save method is 
# replaced with this when the validations module is mixed in, which it is by default. 
def save(options={}) 
perform_validations(options) ? super : false 
end 
+0

i c! : D "ActiveRecord :: Validations", "ActiveRecord :: Base" içindeki "ActiveRecord :: Continistence" öğesinin ardından eklendiği için "kaydetme" yi geçersiz kılar mı? : O –

8

Aynı şeyi ifade bir parametre ile kullanıldığında ne zaman gibidir: Eğer farkında olabilir bu yöntem ActiveRecord::Validations burada tarafından geçersiz olur çünkü Ama, bir ActiveRecord modelinde tasarruf çağrısında seçenekleri kabul eder isim: kalan tüm argümanları kaldır. Bunun dışında, onları bağlayacak bir isim olmadığı için, argümanlara erişilemez. Başka bir deyişle: herhangi bir sayıda argüman alır ama hepsini yok sayar. Eğer bir argüman listesi olmadan super çağırdığınızda üst sınıf yöntemine olduğu gibi, tartışmalar iletilir olsun: aslında argümanları kullanmak tek yolu olduğunu

Not.

+0

Oooo ic! thx: D !!! –

İlgili konular