I have this JQuery code:
$("p.exclamation, div#notification_box").live("mouseover", function() { });
and I want to call this rails method from inside the jQuery code as a callback:
def render_read self.user_notifications.where(:read => false).each do |n| n.read = true n.save end end
This method is in my user model. Is there any way to do this?
Make an AJAX call, set up a route, respond with a controller action and call your method.
# whatever.js $("p.exclamation, div#notification_box").on("mouseover", function() { $.ajax("/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: This code is for Rails 3.x and Ruby 1.9.x
It's good that you have that model code. We'll need to add a new action and make sure your route is setup. If you're using resources you'll have to add collection or member. Since you're doing an update I would choose PUT
as the http method.
Here's an example route:
resources :user_notifications do collection do put 'render_read' end end
Go ahead and add the render_read
action to your controller.
Your jQuery code will look something like this:
$("p.exclamation, div#notification_box").live("mouseover", function() { $.ajax({ url: "/user_notifications/render_read", type: 'PUT' }); });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With