2017-05-10 20 views
12

değişiyor. Bir projeyi Rails 5.1.0'a yeni yükselttim ve bu kullanımdan kaldırma uyarısını görüyorum. Bu"attribute_changed?" Davranışı, geri aramaların ardından

class MyClass 
    before_valiadtion :my_method 

    def my_method 
    if name_changed? 
     ... 
    end 
    end 
end 

ben tam kullanımdan kaldırılması uyarı anlamıyormuş gibi

DEPRECATION WARNING: The behavior of `attribute_changed?` 
inside of after callbacks will be changing in the next version of Rails. 
The new return value will reflect the behavior of calling the method 
after `save` returned (e.g. the opposite of what it returns now). 
To maintain the current behavior, use `saved_change_to_attribute?` instead. 

Kodum görünüyor. saved_change_to_name kullanırsam, kaydedildikten sonra bunu denetler, ancak doğrulama geri aramadan önce budur.

Ayrıca, name_changed? - saved_change_to_name değiştirirseniz, özelliklerim geçmiyordur.

Bunun için uygun yöntemin ne olacağını anlamakta zorlanıyorum. Bana öyle geliyor ki, işi daha önce yapmanın nasıl olduğunu, bu değişimin ardındaki nedenleri tam olarak anlayamadığımı ve bu kullanım dışı uyarılardan nasıl kaçınmam gerektiğini anladım.

+0

Bu sorunu hala görüyor musunuz? Bunu kendim 'before_validation' geri çağırma ile çoğaltmaya çalıştım, ancak kullanımdan kaldırma uyarısı görünmüyor (Rail 5.1.1). – sman591

cevap

7

Eğer kaydedilecek üzere olan sadece kaydedildiğini değişikliği veya bir arıyorsanız Hava daha net ifade new names for these methods vardır.

Sizin durumunuzda, ikincisi, will_save_change_to_attribute?(:name)'u kullanmanız gerekir. Kullanımdan kaldırılma uyarısı, yalnızca ilk durumda bahsedildiği ve yanlış bir geri aramada olması gerektiği varsayımıyla gerçekten yanıltıcıdır.