【发布时间】:2015-10-02 16:26:55
【问题描述】:
所以我很困惑如何在创建操作之后发回更新的@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>
我将单击“新建”按钮,该按钮会触发控制器的新操作。这是我的控制器代码:
class TasksController < ApplicationController
before_action :all_tasks, only: [:create, :update]
before_action :set_tasks, only: [:edit, :update]
respond_to :html, :js
# index action has been removed
def index
@tasks = Task.all
respond_to do |format|
format.html
format.json
end
end
def new
@task = Task.new
end
def create
@task = Task.create(task_params)
end
def update
@task.update_attributes(task_params)
end
private
def all_tasks
@tasks = Task.all
end
def set_tasks
@task = Task.find(params[:id])
end
def task_params
params.require(:task).permit(:description, :deadline)
end
end
这将呈现 new.js.erb 代码:
$('#task-form').html("<%= j (render 'form') %>");
$('#task-form').slideDown(350);
这将呈现新表单:
<%= simple_form_for @task, remote: true do |f| %>
<%= f.input :description %>
<%= f.input :deadline %>
<%= f.button :submit %>
<% end %>
当我点击提交时,它会再次点击控制器的创建动作
def create
@task = Task.create(task_params)
end
在这里之后,我想做的是发回更新的@tasks 集合并将它们呈现在页面上。无论如何我可以再次渲染 index.html.erb 视图并将其发送 Task.all 吗?
【问题讨论】:
标签: ruby-on-rails ajax