未定义的方法`id'为0:Fixnum在销毁时

时间:2016-01-29 17:47:50

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我正在尝试销毁数据库中的记录,但是我收到了一个我不明白的错误:

  

未定义的方法`id'为0:视图中的Fixnum

以下是我的观点:

<%= form_for(:subject, :url => { :action => 'destroy' , :id => @subject.id }) do  %>
    <h2> Are you sure you want to delete <%= @subject.name %> ? </h2>
    <div class="form-buttons">
    <%= submit_tag("DELETE") %>
<% end %>

控制器操作:

  def delete
    @subject = Subject.delete(params[:id])
  end

  def destroy
    @subject = Subject.delete(params[:id]).destroy
    redirect_to(:action=> 'index')
  end

2 个答案:

答案 0 :(得分:0)

控制器操作:

{{1}}

答案 1 :(得分:0)

与评论等相反,您有correct syntax,但有一点问题:

def destroy
    @subject = Subject.delete params[:id]
    redirect_to :index
end

您的delete操作是Red Herring,应该从控制器中删除(其语法正确,但未使用)。

以上代码应该有效。您的错误是您在不支持它的对象上调用destroy实例方法)。如果您想使用.destroy,则必须在Subject类的实例上使用它:

@subject = Subject.find params[:id]
@subject.destroy

正如您在上面的代码中所做的那样,Subject.delete params[:id]方法可以正常运行,因为它是方法。但是,您必须知道.delete没有调用任何回调。