2016-01-22 2 views
1

У меня есть небольшое приложение с событиями. В моем индексном представлении для событий я повторяю все события и отображаю некоторые данные. Внутри цикла each у меня есть ссылка на «Upvote» конкретное событие, это запрос ajax. По некоторым причинам мое мнение не обновляется сразу же, но обновляется, когда я снова нажимаю «Upvote».Rails link_to с ajax remote true not update view

Вот моя ссылка на 'Upvote'

<div id="upvote_link_<%= event.id%>"> 
    <%= link_to('Upvote', upvote_event_path(event), method: :post, remote: true)%> 
</div> 

Это мой upvote метод, где я увеличиваю votes поле.

def upvote 
    @event = Event.find(params[:id]) 
    Event.increment_counter(:votes, @event.id) 
    respond_to do |format| 
     format.js 
    end 
    end 

Следующее это мой upvote.js.erb где я заменил старое votes значение с новым значением.

$('#upvotes_<%= @event.id %>').html("<%= escape_javascript (render 'upvote', event: @event)%>"); 

Следующая моя _upvote.html.erb частичная, которая заменяет старую votes значение.

<span style="font-family:MetaSerifOT-Book;font-size:13px;"> 
    <%= pluralize(event.votes, "vote") %> 
</span> 

Проблема заключается в том, когда я нажал на ссылку «Upvote» мой запрос проходит через и votes поле в моей модели событий не обновляется, но обновление вид обыкновению, пока я нажал Upvote снова. Я не уверен, что происходит. Любые идеи или предложения?

Обновление Это где я установить идентификатор: upvotes_<%= event.id %> Я изолировал подсчет Votes внутри частичный.

<div id="upvotes_<%= event.id%>"> 
      <%= render 'upvote', event: event %> 
    </div> 
+0

@rob Я обновил вопрос, чтобы показать, где я установил ID:' upvotes_ <% = @ event.id%> ' –

ответ

2

Проблема в коде контроллера. Думаю, объект @event не перезагружается. Одним из решений является перезагрузка объекта @event либо в виде, как

$('#upvotes_<%= @event.id %>').html("<%= escape_javascript (render 'upvote', event: @event.reload)%>");.

+2

Эй, Сантана, который исправил проблему. Большое спасибо. Я не видел примера, когда пользователь должен «перезагружать». Еще раз спасибо. –

+0

Спасибо Elvyn Mejia, plz проголосовать за мой ответ. – Santanu

+0

Это должно быть принято, если правильно –

0

Чтобы добавить ответ Santanu «s, вы хотите посмотреть на код вашего метода:

#app/controllers/events_controller.rb 
class EventsController < ApplicationController 
    respond_to :js, only: :upvote #-> if you have the responders gem 

    def upvote 
     @event = Event.find params[:id] 
     @event.increment! :votes 
     respond_with @event 
    end 
    end 

increment!

Смежные вопросы