0

有一个与 Ruby on Rails 应用程序相关的问题让我困惑了很长时间。我在 3 个不同的环境中测试了相同的工作流程,但在任何一个环境中,我都无法让“破坏”链接正常工作!

使用此设置:

  • RVM 1.17.4
  • 红宝石 1.9.3p327
  • 导轨 3.2.9

然后,从字面上看,执行这些命令:

$ rails new foo
$ cd foo/
$ rails g scaffold bar title:string
$ rake db:migrate

它生成了这个控制器:

  # DELETE /bars/1
  # DELETE /bars/1.json
  def destroy
    @bar = Bar.find(params[:id])
    @bar.destroy

    respond_to do |format|
      format.html { redirect_to bars_url }
      format.json { head :no_content }
    end
  end

这是视图中的破坏线:

<%= link_to 'Destroy', bar, method: :delete, data: { confirm: 'Are you sure?' } %>

这是最后一页中的代码:

<a href="/bars/1" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>

在布局中,我有这些:

  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>

在 application.js 我有这些:

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

这些是 html 输出中的行:

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/bars.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

这些是路线:

    bars GET    /bars(.:format)          bars#index
         POST   /bars(.:format)          bars#create
 new_bar GET    /bars/new(.:format)      bars#new
edit_bar GET    /bars/:id/edit(.:format) bars#edit
     bar GET    /bars/:id(.:format)      bars#show
         PUT    /bars/:id(.:format)      bars#update
         DELETE /bars/:id(.:format)      bars#destroy

有人得出相同的结果吗?为什么它不起作用?

我在 Internet 上找到的解决方法表明 javascript 未正确加载,有时建议将操作从 DELETE 更改为 GET。有些人建议更改按钮的链接。无论如何,确认永远不会出现,并且在所有视图中重写所有销毁操作真的很烦人。

4

2 回答 2

1

给定html,应该没有问题。因此,这可能是客户端问题,而不是服务器端问题。

如你所说...

我在 Internet 上找到的解决方法表明 javascript 未正确加载...

  1. 您可能有一个不支持 javascript 的浏览器,或者您禁用了 javascript。

    你在哪些浏览器中测试过这个?尝试 Firefox,并在选项窗口中,确保内容选项卡已选中启用 javascript 。

  2. 或者,转到浏览器/assets/jquery.js?body=1/assets/jquery_ujs.js?body=1在浏览器中确保 javascript 框架文件存在。如果没有,您需要将这些添加到您的资产目录中,如果您在生产环境中运行,则可能需要运行。rake assets:precompile

于 2012-12-29T22:41:04.277 回答
0

如果启用了 JavaScript,并且您确定销毁操作必须有效,但链接未发送正确的 HTTP_METHOD = DELETE,并且路由设置正确,则尝试更改 DOCTYPE

<!DOCTYPE html>
于 2012-12-29T21:26:34.780 回答