删除链接在Rails 3视图中发送"Get"而不是"Delete"

Jam*_*les 39 ruby-on-rails ruby-on-rails-3

我正在使用Rails 3,并且有一个页面可以输出数据库中的帖子列表.我希望能够从链接中删除帖子.

下面的第二个例子有效,但第一个没有.谁知道为什么第一个不起作用?我的观点包含:

# this link sends a "GET" request which asks for the #show function  
<%= link_to 'Delete', post, :method => :delete %>

# this link sends the proper "DELETE" request which asks for the #destroy function
<%= button_to 'Delete', post, :method => :delete %>
Run Code Online (Sandbox Code Playgroud)

我的路线文件包含以下内容:

resources :posts 
Run Code Online (Sandbox Code Playgroud)

von*_*rad 48

确保<head>布局中的部分包含以下内容:

<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
Run Code Online (Sandbox Code Playgroud)

在Rails 3中,正在使用JavaScript处理删除请求,以确保正确发送请求.如果您没有csrf元标记和所需的JavaScript代码,则删除链接将不起作用.该:defaultsJavaScript文件包括-等等-的prototype.js和application.js中.后者包含使链接起作用的东西,但依赖于Prototype框架.

如果您不想使用默认的Prototype JavaScript库,那么有几个其他框架的application.js端口.例如,你可以在这里找到jQuery .

无论JavaScript如何,按钮仍然可以工作,因为生成的HTML代码button_to本身包含所有必要的信息.这就是为什么你看到按钮工作而链接不工作的原因.


ali*_*ikk 17

好像

<%= javascript_include_tag :defaults %>
Run Code Online (Sandbox Code Playgroud)

不再受支持

http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/JavascriptTagHelpers/javascript_include_tag

相反,你应该使用

<%= javascript_include_tag 'application' %>
Run Code Online (Sandbox Code Playgroud)


Rom*_*lex 5

我在Rails 5.2.3中遇到了同样的问题,这对我有所帮助:

布局头:

<%= javascript_include_tag "rails-ujs" %>
Run Code Online (Sandbox Code Playgroud)

配置/初始化器/资产

Rails.application.config.assets.precompile += %w( rails-ujs.js )
Run Code Online (Sandbox Code Playgroud)