如何删除/销毁rails中的记录?
我正在构建一个基于railsguide的rails应用程序
http://guides.rubyonrails.org/getting_started.html
它在erb中调用的语法是……
由于某些原因,这读作为
https://localhost:3000/articles/[#]
其中#是要删除的给定记录。 换句话说,我想删除一条记录,并将我的代码解释为显示所述记录。
我能做错什么?
更多信息
这是动态生成的
Destroy
application.html.erb具有以下内容……
true %>
控制器定义
def destroy @article= Article.find(params[:id]) @article.destroy redirect_to articles_path end
在application.html.erb中使用’application’时出错
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)
这完全正常。 在REST世界中,请求使用动词(GET,DELETE等)和标识资源的URI的组合。 如果您对同一资源(即同一篇文章)做了不同的事情,那么只有动词会发生变化。 对象的显示页面使用GET,更新操作使用PATCH(在rails 4.1之前的PUT)并且销毁记录使用DELETE
在实践中,链接总是导致GET请求,甚至表单只允许GET或POST,因此rails模拟剩余的方法 – 单击带有data-method=destroy
属性的链接会创建一个表单,该表单使用隐藏的_method
输入发布到URL值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库)
最有可能的是,Rails默认的javascripts没有被加载 – 特别是jquery_ujs。 这个javascript允许Rails解释DELETE调用,这些调用并不完全符合浏览器标准。
您加载的javascript名为“default”。 Rails标准是’应用程序’。 检查assets / javascripts中是否有’default.js’及其包含的内容。 如果您希望Rails开箱即用,只需转到:
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> <%= csrf_meta_tags %>
只要您没有更改application.js文件,这应该可以工作。
您展示的代码将执行两项操作:
1)它会创建一个javascript弹出窗口,询问“你确定吗?”。 这必须在客户端上运行,而不是在服务器上运行。 所以Rails在你的浏览器中生成一个看起来像#的“javascript”链接。
2)如果单击“是”,它将向您的服务器发送HTTP DELETE。 不幸的是,浏览器不容易这样做。 因此它会生成更多的javascript代码(AJAX)。
所以你看到的不是Ruby / Rails,而是Rails为你生成的Javascript代码。