有一个问题困扰我很长一段时间,现在与Ruby on Rails应用程序有关。我在3个不同的环境中测试了完全相同的工作流程,但没有一个我可以让“破坏”链接工作!
使用此设置:
然后,按字面意思执行这些命令:
$ 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
有人得出同样的结果吗?为什么不起作用?
我在互联网上找到的解决方法是建议没有正确加载javascript,有时建议将操作从DELETE更改为GET。有人建议更改按钮的链接。无论如何,确认永远不会出现,重写所有视图中的所有销毁操作真的很烦人。
答案 0 :(得分:1)
鉴于html,应该没有问题。因此,这可能是客户端问题,而不是服务器端问题。
正如你所说......
我在互联网上找到的解决方法是建议javascript没有正确加载......
你可能有一个没有javascript支持的浏览器,否则你已经禁用了javascript。
您在哪些浏览器中测试过这个?尝试使用Firefox,在选项窗口中,确保选中内容标签启用javascript 。
或者,在浏览器中转到/assets/jquery.js?body=1
和/assets/jquery_ujs.js?body=1
,以确保javascript框架文件存在。如果没有,您需要将这些添加到您的资产目录,如果您在生产环境中运行,可能需要运行rake assets:precompile
。
答案 1 :(得分:0)
如果启用了JavaScript并且您确定 destroy 操作必须正常,但是链接没有发送正确的HTTP_METHOD = DELETE,并且路由设置正确,则尝试更改DOCTYPE < /强>:
<!DOCTYPE html>