1

问题:尝试在我的博客上实现“点赞”功能

邮政索引:

<% @posts.each do |post| %>
<tr>
<td><%= post.name %></td>
<td><%= link_to post.content, post %></td>
<td><%= post.created_at.strftime("%Y/%m/%d, %I:%M%p") %></td>
<td><%= post.view %></td>
<td><%= post.like %></td>
<td><%= post.hate %></td>
<td><%= link_to 'like', like_post_path(post), :remote => true %></td>
</tr>
<% end %>

后控制器:

def like
 @post = Post.find(params[:id])
 @post.like += 1
 @post.save

 respond_to do |format|
    format.js
 end
end

app/views/posts/like.js.erb

$('#post').html("<%=j @post.like %>");

问题:
我认为我没有正确指向我在 like.js.erb 中查看的帖子。
在索引文件中,只需执行 <%= @post.view %> 即可。但是你如何在 like.js.erb 中做到这一点?

4

2 回答 2

1

当您想在 ajax 调用后更新它时,您需要一些标识符来识别您的 html 中的帖子之类的计数

邮政索引:

<% @posts.each do |post| %>
  <tr>
    <td><%= post.name %></td>
    <td><%= link_to post.content, post %></td>
    <td><%= post.created_at.strftime("%Y/%m/%d, %I:%M%p") %></td>
    <td><%= post.view %></td>
    <td id= "post<%= post.id %>_like"><%= post.like %></td>  <!-- set id (identifier) here -->
    <td><%= post.hate %></td>
    <td><%= link_to 'like', like_post_path(post), :remote => true %></td>
  </tr>
<% end %>

然后在您的app/views/posts/like.js.erb中,

<% if @post.errors.blank? %>
  $("#post<%= @post.id %>_like").html("<%=j @post.like %>");
<% end %>
于 2012-11-11T06:21:11.443 回答
0

使用 Ajax 修复表格行的完整方法:

在您的 show.html(或 index.html)文件中,您可能已经有一个表格。

<tr>
 <td>row 1</td>
 <td>row 2</td>
 <td>row 3</td>
</tr>

让我们假设这些行代表某种变量。那么上面的表格就像,

<tr>
 <td><%= @variableA %></td>
 <td><%= @variableB %></td>
 <td><%= @variableC %></td>
</tr>

我想更改 variableA 而不重新加载整个页面。所以我使用 Ajax。

我的方法:

def fixvar
 @variableA = 2
end

您必须添加一个组件才能使用 Ajax。

def fixvar
 @variableA = 2
end

respond_to do |format|
 format.js
end

无论您想要什么,您都将拥有一个链接,该链接将通过 ajax 调用更改。

<%= link_to 'change variable A', URLof_fixvar(@variableA), :remote => true %>

通过使用选项 :remote => true,您在 link_to 方法中使用了 ajax 组件。您必须相应地在 config/routes.rb 中设置 URLof_fixvar。路由

让我们指定在表中更新的位置。

<tr>
 <td id="variable_change_<%= @variableA.id %>><%= @variableA %></td>
 <td><%= @variableB %></td>
 <td><%= @variableC %></td>
</tr>

我们按照上面的操作来指定我们要更新的行。例如,该行现在定义为 variable_change_1。(假设 variableA.id 为 1)

现在,您需要转到相关的视图文件夹,并创建一个与上面定义的方法相关的 .js.erb 文件。例如,我在 PostController 中定义了“like”方法,所以我创建了

app/views/posts/like.js.erb

在这里,您只需要一行代码:

$("#variable_change_<%= @variable.id %>").html("<%= @variableA %>");

.html 之前的第一部分指向指定的行,之后的部分是我们要更新的值。完毕!

于 2012-11-11T08:34:48.027 回答