0

Yani benim form var ve ben her zaman ben aslında yapmış olsa bile her zaman yanlış yanıt almak gibi bu başarısızparçanın parametreler değişiklikler

def update 
    @student = Student.find(params[:id]) 

    if @student.update_attributes!(student_params) 
    @student.read_notes = true 
    #here i check if the records changed or not? 
    ap @student.name_changed? 
    end 
end 

def student_params 
    params.require(:student).permit(:name, :email, :age, :class) 
end 

şöyle benim denetleyicisi benim güncelleme yöntemine sahip ad kaydında değişiklikler.

Bu şekilde güncelleştiriyorsanız, değişiklikleri kayıt defterimde nasıl izlerim?

cevap

0

Kaydı kaydettiğinizde (hangi, update! ve update'un tümü), Rails'in "kirli izleme" özelliği sıfırlanır ve herhangi bir şeyin değişip değişmediğini kolayca anlayabilme yeteneğini kaybedersiniz. Bunun yerine ne böylece gibi assign_attributes kullanmaktır:

def update 
    @student = Student.find(params[:id]) 

    @student.assign_attributes(student_params) 

    if @student.name_changed? 
    # ... 
    end 

    @student.save! 
end 

ayrıca kaydedildikten sonra yapılan değişiklikleri saklar previous_changes adlı bir ActiveRecord yöntemi var. This article, bunun nasıl kullanılacağı hakkında ayrıntılı bilgi içeriyor.

Ayrıca name parametresinin kaydın name parametresinden farklı olup olmadığını veya güncellemeden önceki değeri saklayıp izlemenize ve sonra da gereksinimlerinize göre karşılaştırıp izleyemeyeceğini takip edebilirsiniz.

+0

Örnek kullanmayı denedim ancak ad_changed konusunda hala yanlış mıyım? bu neden böyle? Ben de benim soru için bazı düzenlemeler yaptım çünkü ben hala eğer @ student.assign_attributes (student_params) –

+0

Eğer ben iyi çalışıyoruz ama ben d öznitelikleri güncellerken bazı bilgileri düzenlemek istiyorsanız @student için bu konuda nasıl giderim? –

+0

'name_changed?', Kullanıcının gönderdiği "name" özelliğinin kullanıcının mevcut adından farklı olmaması durumunda false döndürecektir. Şimdi, eğer * herhangi bir * özniteliğinin değişip değişmediğini test etmek isterseniz, bunu 'student.changed?' Ile kontrol edebilirsiniz. –

İlgili konular