2015-07-02 4 views
1

Привет, рельсы 4 новичка здесь. Кажется, я не могу получить ajax для обновления представления. Я в недоумении. Я могу получить предупреждение, чтобы всплывать при нажатии на ссылку +1 в представлении, но я не могу получить представление для обновления (показывать голоса) диапазона с id = «ajaxed», даже если база данных обновляется. Я прочитал путеводители на ajax и посмотрю около 6 видеороликов на youtube о том, как это сделать, и это кажется правильным для меня, но не работает для меня. вот мой HTML:Javascript wont update div rails 4

<tbody> 
<% @topics.each do |topic| %> 
    <tr> 
    <td><%= topic.title %></td> 
    <td><%= topic.description %></td> 
    <td><span id="ajaxed"><%=pluralize(topic.votes.count, "vote")%></span></td> 
    <td><%= link_to "+1", upvote_topic_path(topic), id: "upvote", remote: true, method: :post%></td> 
    <td><%= pluralize(topic.downvotes.count, "downvote") %></td> 
    <td><%= link_to "-1", downvote_topic_path(topic), method: :post %></td> 
    <td><%= link_to 'Show', topic %></td> 
    <td><%= link_to 'Edit', edit_topic_path(topic) %></td> 
    <td><%= link_to 'Destroy', topic, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
<% end %> 

Вот мой контроллер:

def upvote 
    @topic = Topic.find(params[:id]) 
    @topic.votes.create 
    #redirect_to topics_path 
    respond_to do |format| 
    format.html { redirect_to topics_path } 
    format.js 
    end 
end 

вот мой upvote.js.erb:

$('#ajaxed').text('<%=pluralize(topic.votes.count, "vote")%>'); 

BTW любая другая форма javascript или jquery, которые я делаю на upvote.js.erb, похоже, работают, он просто не обновляет мой пробег «#ajaxed» , Я также попробовал .html и даже прямо js document.getElementById («ajaxed»). InnerHTML = '<% = pluralize (topic.votes.count, «vote»)%>', это дает мне нежелательные результаты. Любая помощь будет принята с благодарностью. Благодаря!!!

ответ

1

Возможно, вам нужно использовать @topic вместо тему в вашем upvote.js.erb. Но тогда вы измените все $ ("# ajaxed"). Вам необходимо установить идентификатор DOM для отдельной темы.

+0

Благодарим за быстрый ответ, но теперь только 1-я тема upvotes вне зависимости от того, в какую тему я плюс один. Я не знаю, как установить идентификатор dom, специфичный для отдельных тем, поскольку темы являются динамическими. Я пробовал $ ('# <% = @ topic [: id]%>'), но он не работает. – rod122

+0

Попробуйте установить диапазон как * *. Затем в upvote.js.erb вы можете использовать * $ ("# ajaxed _ <% = @ topic.id%>") *, чтобы различать отдельную тему. –

+0

Спасибо, что сработал! – rod122