我遇到了一个奇怪的问题,即使我指定了请求类型,我的所有链接仍会发送GET请求。例如:
<%= link_to "<i class='fa fa-trash-o'></i>".html_safe, workout_path(workout), method: :delete, data: { confirm: 'Are you sure you want to delete this workout?' }, :class => "delete-workout" %>
将发送GET请求并将我引导至锻炼显示页面,而不是将其删除。
<%= link_to "Like", '/wellness/4/like', method: :post, remote: true %>
同样的事情,发送GET请求,带我到ID为4的显示页面,我收到消息:
没有路线匹配[GET]“/ wellness / 3 / like”
这是正确的,因为我的路线是:
post "/wellness/:id/like" => "wellness#like"
我确实正确加载了jQuery ujs,所以这也不是问题。
答案 0 :(得分:1)
听起来您的浏览器禁用了Javascript。 Rails documentation for link_to说:
请注意,如果用户禁用了JavaScript,请求将回退到使用GET。
验证的一种方法是将link_to
更改为button_to
,这是一种更安全的选择,如Rails documentation for button_to中所述:
生成一个包含单个按钮的表单,该按钮提交到由该组选项创建的URL。这是确保搜索机器人或加速器不会触发导致数据更改的链接的最安全方法。
一般情况下,最好不要依赖JavaScript来实现主要功能,因为无法保证您的用户可以启用它。实现删除和喜欢的主要功能只有在启用JS时才有效,这不是最佳做法。而是选择progressive enhancement or graceful degradation。
答案 1 :(得分:0)
我认为这个错误是因为资源。
resourses wellness do resourses likes end
- 然后运行#rake routes你可以看到uri:
GET method /wellness/:id/likes