Ruby on rails 在创建AJAX操作之后,如何发回Rails中更新的对象集合?

Ruby on rails 在创建AJAX操作之后,如何发回Rails中更新的对象集合?,ruby-on-rails,ajax,Ruby On Rails,Ajax,因此,我对如何在create操作之后发回@tasks的更新集合感到困惑,这样我就可以在页面上看到新创建的项目,而无需进行刷新。我该怎么做?让我按顺序引导您浏览我的代码 首先,这是我的index.html.erb代码: <div class="row"> <div class="col-md-5 col-md-offset-1"> <h2>Tasks</h2> </div> <div class="col-md

因此,我对如何在create操作之后发回@tasks的更新集合感到困惑,这样我就可以在页面上看到新创建的项目,而无需进行刷新。我该怎么做?让我按顺序引导您浏览我的代码

首先,这是我的index.html.erb代码:

<div class="row">
  <div class="col-md-5 col-md-offset-1">
    <h2>Tasks</h2>
  </div>

  <div class="col-md-2 col-md-offset-4">
    <%= link_to new_task_path, remote: true do %>
      <button class="btn btn-default">New</button>
    <% end %>
  </div>
</div>

<div class="row">
  <div class="col-md-6 col-md-offset-2" id="task-form" style="display:none;"></div>
</div>

<div class="row">
  <div class="col-md-7 col-md-offset-1" id="tasks"><%= render @tasks %></div>
</div>
$('#task-form').html("<%= j (render 'form') %>");
$('#task-form').slideDown(350);

在这里之后,我想做的是发回@tasks的更新集合,并在页面上呈现它们。无论如何,我可以重新呈现index.html.erb视图并将其发送给Task.all吗?

def create中添加实例变量
@tasks

def create
  @task  = Task.create(task_params)
  @tasks = Task.all
  respond_to do |format|
    format.js
  end
end
创建一个新文件
Create.js.erb

$('#tasks').html("<%= j (render @tasks) %>");
$('#tasks').html(“”);

在您的情况下,您的
创建.js.erb
将如下所示:

$('#tasks').append("<li> <%= @task.inspect %> </li>");
$(“#任务”)。追加(
  • ”;
    rails是否会自动查找create.js.erb文件?它是如何做到这一点的?render@tasks在幕后为您做了什么?是的。Rails将使用
    create.js.erb
    作为
    create
    方法中的响应js格式。在render@tasks的幕后,我不确定这一点,但是rails可以自动检测文件和对象。你能告诉我你在渲染部分任务时使用的是什么文件吗?
    def create
      @task  = Task.create(task_params)
      @tasks = Task.all
      respond_to do |format|
        format.js
      end
    end
    
    $('#tasks').html("<%= j (render @tasks) %>");
    
    $('#tasks').append("<li> <%= @task.inspect %> </li>");