Rails 3:method => :删除在Internet Explorer中不起作用

时间:2010-09-22 18:25:11

标签: ruby-on-rails-3

我将在railstutorial.org上阅读rails 3教程。我刚刚创建了一个非常简单的脚手架用户。

脚手架生成的销毁链接在Internet Explorer中不起作用。它会重定向到show动作,而不是删除用户。

这个问题只发生在IE9和IE8(迄今为止我测试的唯一IE版本)问题不会发生在Firefox中。谁能告诉我为什么会这样?

观点:

<%= link_to 'Destroy', user, :confirm => 'Are you sure?', :method => :delete %>

生成的HTML:

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

控制器:

def destroy
    @user = User.find(params[:id])
    @user.destroy

    respond_to do |format|
      format.html { redirect_to(users_url) }
      format.xml  { head :ok }
    end
end

11 个答案:

答案 0 :(得分:8)

在带有资产管道的Rails 3.1中,所有的javascript都在application.js中。所以,而不是:默认值,你需要“应用程序”。

<%= javascript_include_tag "application" %>

答案 1 :(得分:2)

确保您有&lt;%= javascript_include_tag:默认%&gt;

JS现在在rails 3中不引人注目,因此必须使用include才能使其正常工作。

答案 2 :(得分:2)

将此应用的public/javascripts/rails.js替换为:

https://github.com/rails/prototype-ujs/raw/master/src/rails.js

最近更新(2010/11/13)。

与Rails 3.0.0 / 3.0.1捆绑在一起的rails.js在Internet Explorer上无效。

答案 3 :(得分:2)

您需要将原型发行版升级到1.7而不是1.7rc2(它不完全支持IE 9)。最新的Rails gem(在撰写本文时(在gem repo中捆绑1.7rc2。转到原型主页,下载新的1.7版本并将其替换为捆绑的prototype.js。

答案 4 :(得分:2)

我无法使用默认的javascript库与IE9一起工作,所以我安装了jquery-rails并且它运行正常。不是理想的解决方案,但如果它有效......

答案 5 :(得分:1)

默认情况下,使用Prototype javascript库创建新的rails项目,在“public / javascript / rails.js”中使用一些特定于原型的辅助函数。脚手架依赖于其中一些帮助程序来处理某些事情,例如销毁记录,因为没有一个很好的无javascript方式来发出DELETE请求等。

确保您的网页正在加载javascript库和“rails.js”文件,这些文件是使脚手架工作所必需的(请参阅theschmitzer的答案,或检查Firebug)。

其次,如果您使用的是jQuery,install the 'jquery-rails' gem然后运行“rails g jquery:install”。这将删除Prototype库,安装jQuery库,并更新帮助程序以使用jQuery。

答案 6 :(得分:1)

尝试将您的javascript默认包含替换为:

<%= javascript_include_tag "jquery" %>
<%= javascript_include_tag "jquery.min" %>
<%= javascript_include_tag "rails" %>

按照上面的步骤获取最新的jquery.js,jquery.min.js和rails.js。无论如何,这对我有用。

或者,替换application.rb中的默认值:

config.action_view.javascript_expansions[:defaults] = %w(jquery jquery.min rails)

然后您的应用程序布局仍然可以看起来

    <%= javascript_include_tag :defaults %>

答案 7 :(得分:1)

这可能是因为脚本(rails.js和/或application.js)的加载发生在头部。在脚本执行时,DOM中没有包含属性data-confirmdata-method的元素。

因此,解决方案是将javascript标记移动到<body>的末尾。此时,DOM很可能已加载,javascript将找到您的元素。

答案 8 :(得分:0)

无论网络浏览器如何,我都会遇到同样的问题。

theschmitzer的答案对我没有帮助。

我发现只要我使用jquery javascript库,就永远不会调用控制器中的destroy方法。

在我的情况下,我的javascript库(jQuery和Prototype)之间存在冲突,这对于这样的新手来说很难理解。我完全改为jQuery - 就像在这个轨道广播的末尾:http://railscasts.com/episodes/205-unobtrusive-javascript

答案 9 :(得分:0)

我有same problem。我使用的是<%= javascript_include_tag :defaults %>以及jQuery库。当我删除jQuery库时,事情很有效。此外,您可以使用noConflict()

答案 10 :(得分:0)

我注意到在rails 4中,link_to将:方法作为html属性“data-method”但是:确认转到属性“确认”,其中javascript需要它为“data-confirm”

不确定这是否是rails中的错误,但您可以通过执行此操作来解决此问题:

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