0

I have a voting mechanism where you can vote up/down on an entry within a given contest. There are a limited number of votes and every entry has an up and a down button next to it. I would like the up button to change styles if there are no votes remaining and the down button to change styles when the user hasn't voted yet.

In my _entry.html I have:

       <div class="vote-box">
        <% if !current_user.voted?(entry) %>
          <%= link_to '-', entry_vote_down_path(entry), method: :post, remote: true, :class => "btn btn-success vote down disabled" %>
        <% else %>
          <%= link_to '-', entry_vote_down_path(entry), method: :post, remote: true, :class => "btn btn-success vote down" %>
        <% end %>


        <% if current_user.votes_remaining(entry.contest) == 0 %>
          <%= link_to '+', entry_vote_up_path(entry), method: :post, remote: true, :class => "btn btn-success vote up disabled" %>
        <% else %>
          <%= link_to '+', entry_vote_up_path(entry), method: :post, remote: true, :class => "btn btn-success vote up" %>
        <% end %>

          <p><%= pluralize entry.votes.count, 'total vote' %> </p>

The entry_vote_up_path, for example, ultimately triggers vote_up in the EntriesController:

def vote_up
  entry = Entry.find(params[:entry_id])
  current_user.vote_up!(entry)
  flash[:notice] = "Vote successfully counted."

  respond_to do |f|
   f.js { @entry = entry }
  end
end

I then have a vote_up.coffee:

  <% if current_user.votes_remaining(@entry.contest) == 0 %>

  $('#entry_<%= @entry.id %> .vote-box a.vote_up').replaceWith('<%=   vote_up_button_for_entry_disabled(@entry) %>')

  <% else %>

  $('#entry_<%= @entry.id %> .vote-box a.vote_up').replaceWith('<%= vote_up_button_for_entry(@entry) %>')

The vote_up_button_for_entry does the same as the link_to in the original html file, I know this works. I feel like the problem is with the "a.vote_up", but I just can't figure it out. Thanks!

1 Answer 1

1

Your coffeescript file is looking for a vote_up class, but you don't actually use that class anywhere. Instead, you use two separate classes, vote and up.

Either change the link_to entries to actually use vote_up and vote_down, or do something like this:

$('#entry_<%= @entry.id %> .vote-box a.vote.up').replaceWith('<%=   vote_up_button_for_entry_disabled(@entry) %>')
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.