Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Including Ajax/JS to my voting system in Rails

How do i make it so that it does not refresh the page? instead it will just update the count numbers? Any help would be appreciated!

Stories controller:

def like
  like = Like.create(like: params[:like], user: current_user, story: @story)
  if like.valid?
    flash[:success] = "Your selection was succesful"
    redirect_to :back
  else
    flash[:danger] = "You can only like/dislike a story once"
    redirect_to :back
  end
end

index.html.erb:

<div class="pull-right">
    <%= link_to like_story_path(story, like: true), :method => :put, :remote => true  do %>
       <i class="glyphicon glyphicon-thumbs-up"></i><%= story.thumbs_up_total %>
    <% end %>

    <%= link_to like_story_path(story, like: false), :method => :put, :remote => true  do %>
       <i class="glyphicon glyphicon-thumbs-down"></i><%= story.thumbs_down_total %>
    <% end %>
</div>

Story.rb model:

def thumbs_up_total
  self.likes.where(like: true).size
end

def thumbs_down_total
  self.likes.where(like: false).size
end
like image 411
suitescripter123 Avatar asked Dec 06 '25 07:12

suitescripter123


1 Answers

The controller should respond_to the js "format", as described in Working with JavaScript in Rails.

Instead of redirect_to :back, respond with a meaningful status code, for example 201 for success (when a new resource has been created) or 400 for a bad request.

See RFC 2616, section 10 - Status Code Definitions.

Then, in your JS, handle the ajax:success event. This is also described in Working with JavaScript in Rails.

like image 196
Jared Beck Avatar answered Dec 07 '25 19:12

Jared Beck



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!