有一个与 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。有些人建议更改按钮的链接。无论如何,确认永远不会出现,并且在所有视图中重写所有销毁操作真的很烦人。