rails 3 - link_to以销毁无法正常工作

时间:2011-01-05 17:01:34

标签: ruby-on-rails ruby-on-rails-3

我正在尝试为我的用户控制器创建一个销毁链接,我也在使用设计。

这是我的代码 -

视图

<%= link_to 'Delete User?', child, :confirm => "Are you sure you want to delete #{child.full_name}?", :method => :delete, :class => "user-additional", :style => "font-size:12px;font-weight:normal;" %>

控制器

def destroy
 if @user = User.find(params[:id])
  @user.destroy
  respond_to do |format| 
    format.html { redirect_to account_index_path } 
    format.xml { head :ok } 
  end
 end
end

路线

devise_for :users 
resources :users, :except => [:new]

该链接转换为localhost:3000 / users / 10

点击后会打开用户显示而不是删除

有什么想法吗?

9 个答案:

答案 0 :(得分:64)

破坏性操作应作为表单提交执行 - http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

使用button_to(传递:method => :delete)代替并正确设置按钮的样式。

答案 1 :(得分:27)

实际上我昨天遇到了完全相同的问题

试试这个:

<%= button_to "delete", your_object, :method=>:delete, :class=>:destroy %>

它起作用(至少对我而言)

答案 2 :(得分:9)

如果您使用的是jQuery而不是Prototype,则可能缺少javascript文件。

您可以从jquery-ujs GitHub页面或Railscast的episode 205找到有关如何将其添加到项目的详细信息。

答案 3 :(得分:6)

我认为这是因为在Rails 3中,不显眼的javascript现在用于此类功能(Rails 2会为您的代码输出一堆讨厌的内联javascript,Rails 3将javascript放在外部文件中,并使用HTML5 data-属性与之交互。)

要解决此问题,您需要在页眉中加入<%= csrf_meta_tags %>以引用外部JavaScript。它还涉及XSS问题。

这里有一些细节:Delete link sends "Get" instead of "Delete" in Rails 3 view

答案 4 :(得分:1)

如果您使用的是jQuery,请确保您拥有以下内容:

<script type="text/javascript">
  // this allows jquery to be called along with scriptaculous and YUI without any conflicts
  // the only difference is all jquery functions should be called with $j instead of $
  // e.g. $jQ('#div_id').stuff instead of $('#div_id').stuff
  var $jQ = jQuery.noConflict();
</script>

答案 5 :(得分:1)

  1. 按照安装部分rails/jquery-ujs
  2. 中的步骤操作
  3. 在布局文件中添加&lt;%= javascript_include_tag“应用程序”%&gt;

答案 6 :(得分:1)

如果您的应用中未包含jquery和jquery-ujs,则默认的link_to默认随脚手架一起使用!

我有同样的问题。在包括这两个js之后它得到了解决!

答案 7 :(得分:1)

此外,如果您在生产模式中遇到此问题,可能是因为您尚未编译资产。见http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

答案 8 :(得分:1)

通过确认信息为我工作。

<%= button_to 'Destroy', {action: :destroy, id: version.id},  onclick: 'return confirm("Are you sure?")', method: :delete %>