2011-05-09 14 views
18

yerinden bir raylar yöntemini çağırmak için bu JQuery kodu vardır:Nasıl jQuery

def render_read 
    self.user_notifications.where(:read => false).each do |n| 
    n.read = true 
    n.save 
    end 
end 

Bu:

$("p.exclamation, div#notification_box").live("mouseover", function() { 

    }); 

ve bu aramak istiyorum geri arama jQuery kod içerisinden yöntemi raylar yöntem kullanıcı modelimde. Bunu yapmanın bir yolu var mı?

cevap

33

Bir AJAX çağrısı yapın, bir rota kurun, denetleyici eylemiyle yanıt verin ve yönteminizi çağırın.

# whatever.js 
$("p.exclamation, div#notification_box").on("mouseover", function() { 
    $.ajax("https://stackoverflow.com/users/render_read") 
}); 

# routes.rb 
resources :users do 
    get :render_read, on: :collection 
    # or you may prefer to call this route on: :member 
end 

# users_controller.rb 
def render_read 
    @current_user.render_read 
    # I made this part up, do whatever necessary to find the needed user here 
end 

PS: Bu kod Raylar 3.x ve Ruby 1.9.x içindir

+1

serin, ben ... teşekkürler jQuery örnek kod takdir ediyorum! – user730569

+1

İşte, düşündüğümden daha basit. – edgerunner

1

Sen render_read yöntemini çağırmak için sunucu tarafında bir denetleyici kurmak gerekir ve daha sonra kullanabilirsiniz İstekte bulunmak için jQuery'nizde $.ajax veya $.post.

3

Bu model kodunuza sahip olmanız iyidir. Yeni bir işlem eklememiz ve rotanızın ayarlandığından emin olmamız gerekiyor. Kaynak kullanıyorsanız koleksiyon veya üye eklemeniz gerekir. Güncelleme yaptığınız için, http yöntemi olarak PUT'u seçerdim.

resources :user_notifications do 
  collection do 
    put 'render_read' 
  end 
end 

Devam edin ve kontrolöre render_read eylemi ekleyin:

İşte bir örnek rotası.

Sizin jQuery kodu şöyle görünecektir:

$("p.exclamation, div#notification_box").live("mouseover", function() { 
    $.ajax({ 
    url: "/user_notifications/render_read", 
    type: 'PUT' 
    }); 
}); 
1

Normalde JavaScript istemci tarafında çalışır, ancak uygulama her müşteri için bir JavaScript işlevi çizer işte bu da mümkündür. Bu durumda bir .erb dosyasında <%= ve etiketleri %> kullanabilirsiniz:

<script type="text/javascript"> 
$(function(){ 
    new AClass.function({ 
     text: <%= Date.today %> 
    }); 
}); 
</script>