2013-07-04 2 views
0

Я пытаюсь добавить ajax в систему голосования, но испытываю трудности с таргетингом на отдельные элементы с помощью jQuery. Это то, что я до сих пор:Правильный способ использования Ajax с рельсами

Vote Ссылка на индекс действия

<%= link_to post_votes_path(post), :method => 'post', :remote => true do %> 
<span class="score"><%= post.votes.size %></span> 
<% end %> 

Создать действие в контроллере Голосуй

def create 
@post = Post.find(params[:post_id]) 
@vote = @post.votes.create 

respond_to do |format| 
    format.html { redirect_to root_url } 
    format.js 
end 
end 

JQuery в голосах # создать вид (create.js.erb)

$('.score').html("I voted"); 

Проблема в том, когда я нажимаю на ссылку, чтобы проголосовать за нее, изменяет html для всех сообщений не только для сообщения i проголосовал. У меня нет большого опыта работы с jQuery, поэтому я не могу помочь, но думаю, что мне не хватает чего-то очевидного. Есть идеи ?

ответ

0

Обычно я использую $ .post JQuery. Я использую asp.net, но предполагаю, что рельсы будут работать и с этим.

$.post("/someurltoyouraction", {myval:val},function(data){ 
    // do stuff after post 
}); 

Это произведет запрос на отправку Ajax. Вы можете определить свои параметры сообщения в объекте {myval:val} в соответствии с вашими требованиями. Это, по сути, основанный на ключевом значении объект определения {key:value}

1

все ваши промежутки имеют .score класс. это и есть причина для всех.

Это возможное решение. Изменение в вашем HTML:

<span class="score p_<%= post.id%>"><%= post.votes.size %></span> 

А затем изменить в create.js.erb

$('.score.p_<%= @post.id %>').html("I voted"); 
Смежные вопросы