根据您的描述,您的链接似乎没有附加不显眼的 JavaScript 侦听器,因此浏览器只是跟随链接的 href。所以问题似乎出在客户端。
但是你的问题没有提供足够的细节来给出一个直接的答案,所以我只列出我将采取的所有步骤来调查这个问题。
首先,要完成这项工作,您必须在布局 <head> 标记中包含所有必需的 javascript 和 csrf 元标记。最好这样做:
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
如果您有这个,请加载页面并查看源代码是否确实正确生成了链接。您应该会看到如下内容:
<head>
<script src="/javascripts/prototype.js?1285857859" type="text/javascript"></script>
<script src="/javascripts/effects.js?1285857859" type="text/javascript"></script>
<script src="/javascripts/dragdrop.js?1285857859" type="text/javascript"></script>
<script src="/javascripts/controls.js?1285857859" type="text/javascript"></script>
<script src="/javascripts/rails.js?1285857859" type="text/javascript"></script>
<script src="/javascripts/application.js?1285934960" type="text/javascript"></script>
<meta name="csrf-param" content="authenticity_token"/>
<meta name="csrf-token" content="b2HRysd23edj1/vrCSRDSac0seDFae3n2gCoTjt0="/>
</head>
如果它们在那里,我会安装 Firebug Javascript 调试器或使用 Chrome 开发人员工具,将其打开并查看页面加载和单击链接时是否有任何错误。您还可以查看发送的请求,看看它们是否是 xhr。
如果仍然无法正常工作,请在 Firebug 中打开 rails.js,并在负责在 data-remote 和/或 data-method 上附加侦听器的代码之前设置断点。就是这个:
document.on("click", "a[data-remote]", function(event, element) {
if (event.stopped) return;
handleRemote(element);
event.stop();
});
在第一行设置断点,在处理函数内设置第二个断点。然后重新加载页面,看看它是否附加了监听器。然后单击链接并查看处理程序是否被触发。然后……这取决于发生了什么。希望你可以自己继续。
只是一般说明 - 我认为应该使用 get 而不是 post 访问 show 操作。
-- 编辑--
我认为406 not acceptable 被返回是因为您的respond_to 块中没有format.html。如果你添加它,那么它应该只呈现show.html.erb 模板。