Link_to在Rails 4中生成GET

时间:2016-01-09 16:21:02

标签: ruby-on-rails ruby ruby-on-rails-4

rails 4 app。一个简单的问题:为什么这会产生GET请求?

   <%= link_to("fdsfds", some_delete_path, method: :delete, data: { confirm: "Are you sure fdsfds?" }) %>

路线:

delete '/some-path/some-path123' => 'controller123#method123', as :some_delete

正确包含所有查询库。

HTML:

<a data-confirm="Are you sure?" rel="nofollow" data-method="delete" href="/fdsfdsfds">dsfdsfds</a>

错误:

No route matches [GET] "/fdsfdsfdss"

3 个答案:

答案 0 :(得分:0)

您的代码很好,但您的javascript包含可能不是。检查您的application.js是否包含正确的库。您可能缺少的是“ jquery_ujs ”,它处理确认对话框和非Get请求。

这是我的查询。

//= require jquery
//= require jquery_ujs
//= require_tree .

如果没有javascript库,您的链接将是GET请求。

答案 1 :(得分:0)

我意识到这不是一个答案,而是“如何调试这个?”

您的检查员会展示什么?它是否将请求显示为DELETE?如果不是,请继续。

将其添加到路径路径的最底部,更新link_to,并检查检查员是否发送DELETE请求?

控制器:

def d abort end

路线:

match '/d' => 'posts#d', :via => [:delete]

视图:

<%= link_to 'delete', '/d', :method => :delete %>

可能存在一些相互矛盾的路线,虽然这种路线极不可能,但是有很多活动部分有时会导致挑剔的错误。

如果这不能回答您的问题,您是否可以发布您的路线和视图,以及检查员的屏幕截图?

答案 2 :(得分:0)

如果有人来到这里使用bootstrap(v4)gem并且总是忽略开发中的tether警告:你实际上需要按照建议添加tether gem。

该错误停止执行当前的js文件。如果所有js文件都是单独的(因为它们正在开发中),这并不会阻止data-method js部分被执行。在生产中,所有js都连接成一个文件,因此它不会执行可能包含data-method代码的文件的其余部分。