我正在建立一个基于railsguide的rails应用程序
http://guides.rubyonrails.org/getting_started.html
它在erb中调用的语法是......
<td><%= link_to 'Destroy', article_path(article),
method: :delete,
data: { confirm: 'Are you sure?' } %></td>
出于某种原因,其内容为
https://localhost:3000/articles/[#]
其中#是要删除的给定记录。换句话说,我想删除一条记录,并将我的代码解释为显示所述记录。
我可能做错了什么?
更多信息
这是动态生成的
<td>
<a rel="nofollow" data-method="delete" href="/articles/2">Destroy</a>
</td>
application.html.erb具有以下内容......
<%= javascript_include_tag 'default', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
控制器定义
def destroy
@article= Article.find(params[:id])
@article.destroy
redirect_to articles_path
end
与使用&#39;应用程序&#39;相关的错误在application.html.erb中
ExecJS::ProgramError in Welcome#index
Showing E:/scabase/app/views/layouts/application.html.erb where line #6 raised:
TypeError: Object doesn't support this property or method
(in C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/turbolinks- 2.5.3/lib/assets/javascripts/turbolinks.js.coffee)
答案 0 :(得分:2)
最有可能的是,没有加载Rails默认的javascripts - 特别是jquery_ujs。这个javascript允许Rails解释DELETE调用,这些调用并不完全符合浏览器。
您加载的javascript名为&#39;默认&#39;。 Rails标准是应用程序&#39;。检查您是否有&#39; default.js&#39;内部资产/ javascripts及其包含的内容。如果您希望Rails开箱即用,只需转到:
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
只要您没有更改application.js文件,这就应该有效。
答案 1 :(得分:1)
这是完全正常的。在REST世界中,请求使用动词(GET,DELETE等)和标识资源的URI的组合。如果您对同一资源(即同一篇文章)执行不同的操作,则只会更改动词。对象的显示页面使用GET,更新操作使用PATCH(在rails 4.1之前的PUT)并且销毁记录使用DELETE
在实践中,链接始终会产生GET请求,甚至表单只允许GET或POST,因此rails会模拟其余的方法 - 单击带有data-method=destroy
属性的链接会创建一个表单,该表单会发布到带有隐藏的URL _method
输入值为DELETE。这是通过包含在新生成的rails应用程序中的一些javascript来完成的。
你有
<%= javascript_include_tag 'default', 'data-turbolinks-track' => true %>
并且你已经表明你在加载default.js时遇到错误 - 我猜你正在遵循一套旧指令,因为在现代应用程序中(因为rails 3.1)这应该是
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
您的application.js文件还应包含(除其他外)
//= require jquery
//= require jquery_ujs
(您也可以使用原型或其他js库)
答案 2 :(得分:0)
您展示的代码将执行两项操作:
1)它会创建一个javascript弹出窗口,询问“你确定吗?”。这必须在客户端上运行,而不是在服务器上运行。因此,Rails会在您的浏览器中生成一个类似#的“javascript”链接。
2)如果单击“是”,它将向您的服务器发送HTTP DELETE。不幸的是,浏览器不容易这样做。因此,它会生成更多的javascript代码(AJAX)。
所以你看到的不是Ruby / Rails,而是Rails为你生成的Javascript代码。