使用带有rails的Ajax的正确方法

时间:2013-07-04 22:50:23

标签: ruby-on-rails jquery

我正在尝试将ajax添加到投票系统,但难以使用jQuery定位单个元素。这就是我到目前为止所做的:

在索引操作中投票链接

<%= 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 view(create.js.erb)

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

麻烦的是,当我点击链接进行投票时,它会更改所有帖子的html而不仅仅是我尝试投票的帖子。没有jQuery的经验,所以我不能帮助,但我想我错过了一些明显的东西。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

所有跨度都包含 .score 类。这就是改变一切的原因。

这是一种可能的解决方案。 改变你的HTML:

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

然后更改你的create.js.erb

$('.score.p_<%= @post.id %>').html("I voted");

答案 1 :(得分:0)

我通常只使用JQuery的$ .post。我正在使用asp.net,但是假设rails也可以使用它。

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

这将产生一个Ajax发布请求。您可以在{myval:val}对象中定义帖子参数以符合您的要求。它本质上是一个基于键值定义的对象{key:value}