我将在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
答案 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-confirm
和data-method
的元素。
因此,解决方案是将javascript标记移动到<body>
的末尾。此时,DOM很可能已加载,javascript将找到您的元素。
答案 8 :(得分:0)
无论网络浏览器如何,我都会遇到同样的问题。
我发现只要我使用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 %>