0

特定のコンテスト内のエントリに賛成/反対の投票ができる投票メカニズムがあります。投票数には限りがあり、すべてのエントリの横に上下ボタンがあります。投票が残っていない場合は上ボタンでスタイルを変更し、ユーザーがまだ投票していない場合は下ボタンでスタイルを変更したいと思います。

私の _entry.html には次のものがあります。

       <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>

たとえば、entry_vote_up_path は、最終的に EntriesController で vote_up をトリガーします。

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

次に、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) %>')

vote_up_button_for_entry は、元の html ファイルの link_to と同じことを行います。これが機能することはわかっています。問題は「a.vote_up」にあるように感じますが、わかりません。ありがとう!

4

1 に答える 1

1

あなたの coffeescript ファイルはクラスを探してvote_upいますが、実際にはそのクラスをどこでも使用していません。代わりに、2 つの別個のクラスと を使用しvoteますup

実際にandlink_toを使用するようにエントリを変更するか、次のようにします。vote_upvote_down

$('#entry_<%= @entry.id %> .vote-box a.vote.up').replaceWith('<%=   vote_up_button_for_entry_disabled(@entry) %>')
于 2012-06-22T05:11:08.960 に答える