如何在 rails 中异步执行 Controller.destroy 操作?
How to perform Controller.destroy action asynchronously in rails?
我可以通过以下代码轻松删除 rails 应用程序中 post
synchronously
的条目:
观看次数
<% @post.each do |post| %>
<tr>
<td colspan="3"><%= link_to 'Destroy', post, :method => :delete, :confirm => 'Are you sure?', :class => 'btn btn-mini btn-danger' %></td>
</tr>
<% end %>
控制器class
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_to do |format|
format.html redirect_to(posts_url) }
format.xml { head :ok }
end
end
这很好用。如何使这个 destroy
过程 async
。所以,我不需要添加 route
或 refresh the page
。
编辑
添加更多说明
任务是制作destroy
方法async
。这样客户端就不会等待响应,destroy
方法将在后台 运行 async
。 destroy 方法也没有保证完成时间。
另一个例子可能是:我必须一次删除多个 post。
尝试 remote: true
选项,
<%= link_to 'Destroy', post, :method => :delete, remote: true, :confirm => 'Are you sure?', :class => 'btn btn-mini btn-danger' %>
def destroy
@post = Post.find(params[:id])
@post.destroy
# Just Guessing you have @posts to refresh and `posts_template` using it.
@posts = Post.all
respond_to do |format|
format.html redirect_to(posts_url) }
format.xml { head :ok }
format.js { render 'posts.js.erb' }
end
end
posts.js.erb
$('some_element').replaceWith('<%=j render 'posts_template' %>');
请根据需要进行更改。我只是猜测。
要发出 Async
请求,您需要 Ajax
和基本 javascript
才能删除 <td>
的代码。
首先将您的 views
代码更改为:
<% @post.each do |post| %>
<tr>
<td colspan="3"><%= link_to 'Destroy', post, :method=> :delete, id: post.id, :class => 'btn btn-mini btn-danger', data: { confirm: 'Are you Sure?', remote: true } %> </td>
</tr>
<% end %>
上面的代码说它将调用PostController
class的destroy
方法。现在您需要对 controller
class
的 destroy
方法进行一些更改
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_to do |format|
format.js
format.html { redirect_to(posts_url) }
end
end
上面的代码很好理解,除了我们为什么使用respond_to
。在 rails 中,我们可以通过两种方式呈现数据:
Javascript
HTML
我们将使用 javascript
来呈现代码,因为这是在 ID
.
的帮助下删除 <td>
标签的简单方法
现在我们需要一个 js
文件来呈现 destroy
方法的响应。为此,请将 destroy.js.erb
添加到 views
.
的同一文件夹中
在 destroy.js.erb
中添加以下代码:
var element = document.getElementById("<%= @post.id %>");
element.parentNode.parentNode.remove();
大功告成!
我会推荐你阅读:http://www.gotealeaf.com/blog/the-detailed-guide-on-how-ajax-works-with-ruby-on-rails
我可以通过以下代码轻松删除 rails 应用程序中 post
synchronously
的条目:
观看次数
<% @post.each do |post| %>
<tr>
<td colspan="3"><%= link_to 'Destroy', post, :method => :delete, :confirm => 'Are you sure?', :class => 'btn btn-mini btn-danger' %></td>
</tr>
<% end %>
控制器class
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_to do |format|
format.html redirect_to(posts_url) }
format.xml { head :ok }
end
end
这很好用。如何使这个 destroy
过程 async
。所以,我不需要添加 route
或 refresh the page
。
编辑
添加更多说明
任务是制作destroy
方法async
。这样客户端就不会等待响应,destroy
方法将在后台 运行 async
。 destroy 方法也没有保证完成时间。
另一个例子可能是:我必须一次删除多个 post。
尝试 remote: true
选项,
<%= link_to 'Destroy', post, :method => :delete, remote: true, :confirm => 'Are you sure?', :class => 'btn btn-mini btn-danger' %>
def destroy
@post = Post.find(params[:id])
@post.destroy
# Just Guessing you have @posts to refresh and `posts_template` using it.
@posts = Post.all
respond_to do |format|
format.html redirect_to(posts_url) }
format.xml { head :ok }
format.js { render 'posts.js.erb' }
end
end
posts.js.erb
$('some_element').replaceWith('<%=j render 'posts_template' %>');
请根据需要进行更改。我只是猜测。
要发出 Async
请求,您需要 Ajax
和基本 javascript
才能删除 <td>
的代码。
首先将您的 views
代码更改为:
<% @post.each do |post| %>
<tr>
<td colspan="3"><%= link_to 'Destroy', post, :method=> :delete, id: post.id, :class => 'btn btn-mini btn-danger', data: { confirm: 'Are you Sure?', remote: true } %> </td>
</tr>
<% end %>
上面的代码说它将调用PostController
class的destroy
方法。现在您需要对 controller
class
destroy
方法进行一些更改
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_to do |format|
format.js
format.html { redirect_to(posts_url) }
end
end
上面的代码很好理解,除了我们为什么使用respond_to
。在 rails 中,我们可以通过两种方式呈现数据:
Javascript
HTML
我们将使用 javascript
来呈现代码,因为这是在 ID
.
<td>
标签的简单方法
现在我们需要一个 js
文件来呈现 destroy
方法的响应。为此,请将 destroy.js.erb
添加到 views
.
在 destroy.js.erb
中添加以下代码:
var element = document.getElementById("<%= @post.id %>");
element.parentNode.parentNode.remove();
大功告成! 我会推荐你阅读:http://www.gotealeaf.com/blog/the-detailed-guide-on-how-ajax-works-with-ruby-on-rails