Rails link_to 方法: :delete
Posted
技术标签:
【中文标题】Rails link_to 方法: :delete【英文标题】:Rails link_to method: :delete 【发布时间】:2013-07-18 20:54:46 【问题描述】:我很抱歉问了一个可能是补救性的问题,但在学习 Rails 时,我试图按照本教程中的注释进行操作:
http://guides.rubyonrails.org/getting_started.html
我昨晚在本教程中发布了一个类似的问题,并得到了及时的回复,这对我有很大帮助,所以我希望同样如此。提前谢谢你。
第 5.14 节:删除帖子
我被指示向 index.html.erb 页面添加删除链接
<h1>Listing Posts</h1>
<table>
<tr>
<th>Title</th>
<th>Text</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.text %></td>
<td><%= link_to 'Show', post_path %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post_path(post),
method: :delete, data: confirm: 'Are you sure?' %></td>
</tr>
<% end %>
</table>
生成:
<td><a data-confirm="Are you sure?" data-method="delete" href="/posts/1" rel="nofollow">Destroy</a></td>
对我来说它看起来不错,但是当我单击链接时,我既没有得到确认,也没有被定向到删除操作。它生成这个 HTTP 动作
Request URL:http://localhost:3000/posts/1
Request Method:GET
Status Code:200 OK
Rails:4,Ruby:2,64 位 windows 8,chrome:版本 28.0.1500.72 m
再次感谢您
添加 application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Listing</title>
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag :application %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
产生了这个错误:
ExecJS::RuntimeError in Posts#index 显示 C:/Ruby-Projects/listing/app/views/layouts/application.html.erb 在哪里 第 6 行提出:
(在 C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/turbolinks-1.3.0/lib/assets/javascripts/turbolinks.js.coffee) 提取的源代码(在第 6 行附近):3 4 5 6 7 8 9 清单 true %>
Rails.root: C:/Ruby-Projects/listing
应用程序跟踪 |框架跟踪 |全跟踪 app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___567964991_28724900' 请求
参数:
无
应用程序.js
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
【问题讨论】:
你的布局中有<%= javascript_include_tag :applicaton %>
吗?
当我添加它时,它给了我一个错误
确保您的JavaScript
正确。
【参考方案1】:
确保你有
//= require jquery
//= require jquery_ujs
到 application.js 文件中,application.js 文件包含在view/layout/application.html.erb
file 中
【讨论】:
我认为我的application.js中已经包含了,如何确保application.js被包含在application.erb中? 将此行<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
添加到 application.html.erb
文件中【参考方案2】:
好的,我需要从 application.js 中删除这两行
//= require turbolinks
//= require_tree .
消除了 ExecJS 运行时错误。为什么这些默认包含在内,我是否应该首先弄清楚它们为什么会导致错误?
FWIW - 删除功能现在可以使用了。
这篇文章的道具:
https://***.com/questions/12520456/execjsruntimeerror-on-windows-7-trying-to-follow-rubytutorial
【讨论】:
【参考方案3】:我的产品应用程序有这个列出的 js 文件。
请您检查一下您是否拥有资产文件夹中的所有文件。
它会自动加载你调用的 post 控制器。
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/products.js?body=1" type="text/javascript"></script>
<script src="/assets/say.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
现在查看我的 index.erb.html 文件
<h1>Listing products</h1>
<table>
<tr>
<th>title</th>
<th>Description</th>
<th>Image url</th>
<th>Price</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @products.each do |product| %>
<tr class="<%= cycle('list_line_odd','list_line_even') %>">
<td><%= product. title %></td>
<td><%= product.description %></td>
<td><%= product.image_url %></td>
<td><%= product.price %></td>
<td><%= link_to 'Show', product %></td>
<td><%= link_to 'Edit', edit_product_path(product) %></td>
<td><%= link_to 'Destroy', product, method: :delete, data: confirm: 'Are you sure?'
%></td>
</tr>
<% end %>
</table>
<br/>
<%= link_to 'New Product', new_product_path %>
【讨论】:
嘿@supercool 我完全不同意这个投票!!直到现在我才意识到这一点,显然在进行编辑之前我无法撤消我的反对意见......不要试图伤害你的 S.O.信用,所以也许你可以做一个最小的编辑(添加一个随机空间等),我可以清除我的反对票。以上是关于Rails link_to 方法: :delete的主要内容,如果未能解决你的问题,请参考以下文章
如果 JS 可能被禁用,Rails 4 link_to :delete 的最佳方法是啥?
Rails6 Link_to Delete 显示 Showview
Rails 是不是支持带有方法 post 的 link_to?