2015-11-17 4 views
1

Так что моя ссылка upvote заменяет счетчик голосов для всех ссылок, а не для отдельных. Помогите?Rails Upvote AJAX не работает должным образом

Контроллер

def upcount 
    @category = Category.find(params[:id]) 
    @category.upcount 
    @category.save 
    respond_to do |format| 
     format.html {redirect_to categories_path(@category)} 
     format.js 
    end 
    end 

Просмотр

<% @categories.each do |category| %> 
    <div class="col-md-3 col-sm-6 hero-feature"> 
    <div class="thumbnail"> 
     <%= image_tag category.image.url(:large) %> 
     <div class="caption"> 
     <%= category.name %> - <%= category.quote %></p> 
     <%= link_to "Upvote", upcount_category_path(category), method: "put", remote: true %> 
     <div id="total-votes"> 
      <%= category.count %> 
     </div> 
     </div> 
    </div> 
    </div> 
    <% end %> 

Upcount.js.erb

$("#total-votes").html("<%= @category.count %>") 

Щелчок второй л чернила превратят замену первого и второго ссылок на 15. Любая помощь будет оценена. Благодаря!

+0

Пусть попробовать с link_to 'Upvote' без опции 'удаленного: правда' ? –

+0

@brian Lau Я думаю, что ваша ссылка или div для голосового голосования сначала и второй имеют одинаковый идентификатор 'total-votes', так что эта вещь произошла –

+0

@VishalJAIN вы правы, я не был уверен, как это исправить, но, к счастью, вы спасли день. –

ответ

2

HTML-идентификаторы должны быть уникальными. Ваше дублирование идентификатора «total-votes» приводит к недействительному HTML. Это также путает ваш javascript, так как он не знает, какой div вы хотите настроить.

Вы можете исправить это, добавив идентификатор категории к идентификатору html, например total-votes-<%= category.id %>, чтобы он был уникальным для всех.

Полный пример:

Посмотреть файл

<% @categories.each do |category| %> 
    <div class="col-md-3 col-sm-6 hero-feature"> 
    <div class="thumbnail"> 
     <%= image_tag category.image.url(:large) %> 
     <div class="caption"> 
     <%= category.name %> - <%= category.quote %></p> 
     <%= link_to "Upvote", upcount_category_path(category), method: "put", remote: true %> 
     <div id="total-votes-<%= category.id %>"> 
      <%= category.count %> 
     </div> 
     </div> 
    </div> 
    </div> 
    <% end %> 

Upcount.js.erb

$("#total-votes-<%= @category.id %>").html("<%= @category.count %>")