删除链接不起作用但按钮不起作用

时间:2011-07-12 02:20:02

标签: ruby-on-rails-3

我遇到的问题与此问题非常相似:rails 3 - link_to to destroy not working

但删除/销毁链接不起作用;我只是被重定向到对象的显示页面。当我创建一个删除按钮时,一切正常。但我想明白为什么。有谁知道吗?

我似乎与我正在使用/调用的一些.js文件有关。

<!-- This link doesn't work -->
<%= link_to('Delete', post, :confirm => 'Are you sure?', :method => :delete) %>-->

<!-- This button does work -->
<%= button_to "delete", post, :method=>:delete, :class=>:destroy, :confirm => 'Are you sure?' %>

后控制器

def destroy
  @post = Post.find(params[:id])
  @post.destroy

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

UPDATE 在做了一些进一步的研究后,似乎其他所有有类似问题的人都包含了以下jquery库:

<script type="text/javascript" src="/javascripts/dragdrop.js"></script>

但我仍然不知道问题是什么......

LOG

Started GET "/posts/7" for 127.0.0.1 at Tue Jul 12 08:34:06 -0400 2011
Processing by PostsController#show as HTML
Parameters: {"id"=>"7"}
Post Load (0.2ms)  SELECT "posts".* FROM "posts" WHERE "posts"."id" = 7 LIMIT 1
SQL (0.2ms)  SELECT COUNT(*) FROM "comments" WHERE ("comments".post_id = 7)
Rendered posts/show.html.erb within layouts/application (116.5ms)

生成HTML

<a href="/posts/17" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Delete</a>

更新:我发现删除<script type="text/javascript" src="/javascripts/jquery-1.5.1.min.js"></script>可以解决我的问题。但我不明白为什么。 jquery1.5.1和rails 3.0.7之间是否存在已知冲突?

3 个答案:

答案 0 :(得分:3)

确保将这些内容包含在应用程序布局中:

<%= javascript_include_tag(:defaults) %>
<%= csrf_meta_tag %>

答案 1 :(得分:1)

在我的情况下添加

<%= javascript_include_tag(:defaults) %>

没用。然而,显式定义java脚本文件就是诀窍

<%= javascript_include_tag 'prototype' %>
<%= javascript_include_tag 'application' %>

还不确定原因:默认标签不起作用......

答案 2 :(得分:0)

如果您通过Gemfile加载了jquery-rails gem(这是默认的rails配置),Rails将自动为您加载jquery。然后通过以下方式加载:

<%= javascript_include_tag(:defaults) %>

查看app / assets / javascripts / application.js以获取告诉rails通过资产添加jquery的代码:

//= require jquery
//= require jquery_ujs

尝试通过以下行加载另一个jquery副本:

<script type="text/javascript" src="/javascripts/jquery-1.5.1.min.js"></script>

你引起了jquery实例的冲突,其影响将是不起作用。