Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails “固定轨道错误”;行动';显示';找不到安全测试控制器“;_Ruby On Rails_Ajax_Rest - Fatal编程技术网

Ruby on rails “固定轨道错误”;行动';显示';找不到安全测试控制器“;

Ruby on rails “固定轨道错误”;行动';显示';找不到安全测试控制器“;,ruby-on-rails,ajax,rest,Ruby On Rails,Ajax,Rest,我希望在我的应用程序中对destroy操作进行AJAX调用,我将按照指南中的示例3执行此操作。我使用的是Rails 3.2.8 我让AJAX请求正常工作,并且destroy操作的调用与我预期的一样。 当用户请求销毁操作的HTML页面时,我想删除该项目,然后将其重定向到另一个页面 问题是,当我插入重定向代码时,HTML和AJAX请求都停止工作。当代码存在时,AJAX请求返回500个内部服务器错误,HTML请求返回“找不到SafetyTestsController的操作'show'。当没有这两行代码

我希望在我的应用程序中对
destroy
操作进行AJAX调用,我将按照指南中的示例3执行此操作。我使用的是Rails 3.2.8

我让AJAX请求正常工作,并且
destroy
操作的调用与我预期的一样。 当用户请求销毁操作的HTML页面时,我想删除该项目,然后将其重定向到另一个页面

问题是,当我插入重定向代码时,HTML和AJAX请求都停止工作。当代码存在时,AJAX请求返回500个内部服务器错误,HTML请求返回“找不到SafetyTestsController的操作'show'。当没有这两行代码时,AJAX工作正常,HTML仍然返回相同的错误

视图(未渲染):

<%= link_to 'Delete', {controller: 'safety_tests', action: 'destroy', id: safety_test.id}, remote: true, method: :delete, confirm: 'Are you sure?', id: "delete_safety_test" %>
<a href="/safety_tests/14" data-confirm="Are you sure?" data-method="delete" data-remote="true" id="delete_safety_test" rel="nofollow">Delete</a>
我怎样才能让这两条线工作

respond_to do |format|
  format.html { redirect_to(url_for(controller: 'students', action: 'show', id: student_id), notice: 'Safety test deleted successfully.') } # actually can be without url_for
  format.js { render nothing: true }
end
第二个原因可能是HTML请求不包含DELETE方法,因此ActionDispatch认为您请求的是:action=>SafetyTestsController中的“show”。检查一下

<%= link_to 'Delete', {controller: 'safety_tests', action: 'destroy', id: safety_test.id}, remote: true, method: :delete, :data => { confirm: 'Are you sure?' }, id: "delete_safety_test" %>
{确认:'确定吗?},id:“删除安全测试”%>
为什么不使用命名路线

<%= link_to 'Delete', safety_test, remote: true, method: :delete, :data => { confirm: 'Are you sure?' }, id: "delete_safety_test" %>
{确认:'确定吗?},id:“删除安全测试”%>

找到了答案。这是适用于JS和HTML的代码:

<%= form_for(safety_test, method: :delete, remote: true, html: {class: "delete_safety_test"}) do |f| %>
    <%= f.submit "Delete", confirm: "Are you sure?" %> 
<% end %> 


这修复了500服务器错误,但HTML请求仍然失败。我发现您的第二个原因是正确的:按钮上的
href
导致
显示
操作,而不是
销毁
操作。我将编辑我的帖子并添加用于生成按钮的代码,以便我们可以修复它。现在请尝试发布您的DOCTYPE DOCTYPE只是
。您给我的代码可以正常工作,但仍然会生成一个
href
show
,而不是
destroy
操作。因此,请求HTML时的错误仍然存在。请尝试将respond_替换为(test)以响应。有必要吗?
respond\u with(test)
在教程中使用过,但是
respond\u to
也有效。
<%= link_to 'Delete', safety_test, remote: true, method: :delete, :data => { confirm: 'Are you sure?' }, id: "delete_safety_test" %>
<%= form_for(safety_test, method: :delete, remote: true, html: {class: "delete_safety_test"}) do |f| %>
    <%= f.submit "Delete", confirm: "Are you sure?" %> 
<% end %>