2016-03-22 23 views
1

Uygulama denetleyicimde uygulama düzeni menüsünde bildirimleri ve bildirimler simgesini ayarlamak için kullandığım bir yöntem var.Güncelleştirme uygulama düzeni simgesi

def set_notifications 
    if user_signed_in? 
    @notifications = Notification.where(user_id: current_user.id) 
    @notifications.each do |n| 
     if n.read == false 
     return @icon_path = 'notification-alert-icon' 
     end 
    end 
    @icon_path = 'notification-icon' 
    end 
end 

Ben okunmamış bildirimleri varken doğru bildirim simgesini olsun bu iyi çalışır: Ben before_action ile bu yöntemi çalıştırmak

<li class="dropdown"> 
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><%= image_tag(@icon_path) %></a> 
    <ul class="dropdown-menu"> 
    <% if @notifications == 0 %> 
     <li class="text-center" style="color:white;">Você ainda não tem notificações</li> 
    <% else %> 
     <% @notifications.each do |n| %> 
     <li><%= link_to n.question.title, question_path(n.question), class: 'text-center' %></li> 
     <% end %> 
    <% end %> 
    <li role="separator" class="divider"></li> 
    <li><%= link_to 'Ver todas as notificações', "#" %></li> 
    </ul> 
</li> 

kullanıcı bildirim simgesini tıkladığını ve soru tıkladığında o Yapacak edemedik ne

notifications = Notification.where(question_id: question.id) if Notification.exists?(question_id: question.id) 
if notifications 
    notifications.each do |notification| 
    if notification.user_id == current_user.id 
     notification.read = true 
     notification.save 
    end 
    end 
end 

geçerli:: (gösteri eylemi içinde) okundu olarak haberdar edildi questions_controller o bildirim işaretler ben güncelleme nasıl @ bildirimi okundu olarak işaretledikten sonra bildirim nesnesi ve uygulama düzenindeki bildirim simgesi? Biliyorum set_notifications yöntemini çağırabilirim ama tek başına uygulama düzenini yeniden yüklemez ve simgeyi değiştirmez mi?

cevap

1

Denetleyici kodunuz, görünüm oluşturmadan önce tamamlanmaya başlar, bu sayede işleme aşamasından önce ayarlanan şeyleri almak için gereken her şeyi yapabilirsiniz. @icon_path gibi değişkenleri bu aşamadan önce herhangi bir sayıda değiştirmekte özgürsünüz, son değer ayarlanan değerdir.

HTML tarayıcıya gönderildikten sonra görünümdeki simgeyi devre dışı bırakmanız gerekirse, geçiş yapmak için JavaScript kullanmanız gerekir.

+0

Bana cevap vermek için zaman ayırdığınız için teşekkürler! Sayfamıza ilk kez eriştiğimde, uygulama denetleyicisi uygulama düzenini doğru bir şekilde çalıştırır ve işler mi? sonra herhangi bir bağlantıyı tıklatıp başka bir denetleyiciye/eyleme gittiğimde, bu, uygulama denetleyicisinin yeniden çalışacağı ve uygulama düzenini tekrar oluşturacağı anlamına gelmez, değil mi? Bağlantıyı tıklattığımda ve raylar, questions_controller # show komutunu çalıştırdığında, daha önce yüklenmiş olan uygulama yerleşimi içinde show.html.erb yerine uygulama düzeni de dahil olmak üzere tüm düzeni yeniden yükleyebilir mi? ya da js kullanmak zorunda kalmanın anlamı nedir? – Rob

+1

Rails için varsayılan davranış, genel olarak HTTP gibi istek/yanıttır. Rails tarafındaki hiçbir durum, "oturum", veritabanı veya diskteki dosyalarda kaldığınızdan başka bir şekilde korunmaz. Her sayfa isteği, yeni bir denetleyici örneği ve örnek değişkenler kadar temiz bir sayfa listesiyle başlar. Ne demek "düzeni yeniden yükle"? Her sayfa isteği her seferinde sıfırdan çalışır. – tadman

+0

Yani, eğer varsa, bu bağlantıyı tıklattığımda <% = link_to 'question', question_path (question)%>, , raylar uygulama denetleyicisinin yeni bir örneğini ve soru denetleyicisinin yeni bir örneğini çalıştıracaktır? – Rob

İlgili konular