当我尝试删除记录时,它会创建一个新记录

时间:2011-06-02 17:12:58

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

我正在尝试简单删除数据库中的记录。

<b> <%= button_to "Cancel your invitation", { :controller=>"invites", :method => 'destroy', :id => invite.id },
:confirm => "Are you sure you want to delete this invite?" %></b>

我指定了控制器,因为我正在从用户视图执行此操作。

单击该按钮时,会为新记录创建一个空白条目。那么为什么当我指定一个destroy方法时它会使用create方法呢?

更多: 我的配置/路由尽可能简单:

  

资源:邀请

我的控制器也很基本:

  def create
    @invite = Invite.new(params[:invite])
    if @invite.save
      redirect_to current_user
    else
      redirect_to root_path
    end
  end



  def destroy
    Invite.find(params[:id]).destroy
    redirect_to current_user
  end

2 个答案:

答案 0 :(得分:2)

我认为,您需要使用delete方法而不是destroy。

答案 1 :(得分:1)

你误用了这些方法。它应该是:

<b>
  <%= button_to "Cancel your invitation", invite, :confirm => "Are you sure you want to delete this invite?", :method => :delete %>
</b>

有2分。

1)对于resources :invites,destroy方法需要delete。如果不将:method => :delete传递给button_to,默认情况下会使用:method => :post,即创建方法。这就是为什么你创建了一个新记录而不是销毁它。

2)当您使用资源时,您可以更好地选择路线,而不是{:controller => "invites", :action => "destroy", :id => invite.id}(请注意它是:action

您可以像上面的示例一样使用invite_path(invite)invite。使用:method => :delete,这将为您提供destroy方法。 (所以:发布创建,发布更新)