使用AJAX(不是表单)更新Rails 3部分

you*_*786 5 ajax ruby-on-rails-3

在提交表单后,我发现了一些关于使用Ajax更新部分的问题和答案.但我的问题是?更简单?,我只是想每隔几秒重新加载一个部分并加载新数据.这真的不难,我记得在Rails 2.3中做了类似的事情,但我无法在任何地方找到答案.

基本上,我有一个show.html.erb渲染部分像这样:

<div id="latest_post">
    <%= render :partial=>'info/latest', :object=>@user, :as=>:user %>
</div>
Run Code Online (Sandbox Code Playgroud)

部分文件位于app/views/info/_latest

<% post = user.posts.last %>
<h1>Last Post</h1>
<p><%= post.content %></p>
Run Code Online (Sandbox Code Playgroud)

我只想让latest_post div每30秒更新一次.请帮忙!

you*_*786 4

事实证明答案有点复杂:

第 1 步:使用 JavascriptsetInterval函数和 jQuery$.get()函数来加载页面,例如/users/1/posts/latest.

setInterval(function(){
  $.get("/users/1/posts/latest.js", function(data){
    $("latest_post").html(data);
  },
  "html")
}, 30000);
Run Code Online (Sandbox Code Playgroud)

第 2 步:创建一个latest.js.erb并将其放入您的app/views/posts文件夹中。

内容latest.js.erb

<%= render partial: 'posts/latest', object: @user.posts.last, as: :post %>
Run Code Online (Sandbox Code Playgroud)

步骤 3:使用您想要的任何内容创建上述部分(如果不需要部分,您可以将 div 的全部内容写入文件中latest.js.erb。)

步骤 4:向您的 、 中添加一个最新方法PostsController,该方法定义@user等以供latest.js.erb使用。

第 5 步:添加get '/latest'到您的routes.rb