Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未定义的局部变量或方法'destroy';对于CommentsController:my destroy comment方法中的类_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 未定义的局部变量或方法'destroy';对于CommentsController:my destroy comment方法中的类

Ruby on rails 未定义的局部变量或方法'destroy';对于CommentsController:my destroy comment方法中的类,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我已经在我的应用程序中添加了一个评论功能,到目前为止,一切正常,直到出现这个错误。我所做的是添加了一个删除注释功能。当我启动服务器时,一切都正常,但问题是在我单击“删除”按钮后出现的 错误消息 CommentsController:类的未定义局部变量或方法“destroy” 不管怎样,这是我的代码 评论管理员 class CommentsController < ApplicationController def create @post = Post.find(params[

我已经在我的应用程序中添加了一个评论功能,到目前为止,一切正常,直到出现这个错误。我所做的是添加了一个删除注释功能。当我启动服务器时,一切都正常,但问题是在我单击“删除”按钮后出现的

错误消息


CommentsController:类的未定义局部变量或方法“destroy”

不管怎样,这是我的代码

评论管理员

class CommentsController < ApplicationController
  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(comments_params)
    redirect_to post_path(@post)
  end

  def destroy
    @comment = Comment.find(params[:id])
    @comment.destroy
    #redirect_to post_path(@post)
  end

  private

  def comments_params
    params.require(:comment).permit(:body, :commenter, :user_id)
  end
end
class CommentsController
注释视图部分

<div class='row'>
    <div class='comments col-md-6'>
        <p>
          <b><%= comment.commenter %>:</b>
          <p><span><%= comment.body %></span></p>
        </p>

        <%= button_to 'Delete', [comment.post, comment],
               method: :delete, data: { confirm: 'Are you sure?' }  %>

    </div>
</div>


  :

评论表

<div class='form-group col-md-5'>

<%= form_for([@posts, @posts.comments.build]) do |f| %>

    <div class="form-group">
        <%= f.label 'Add a comment' %><br>
        <%= f.text_area :body, class: 'form-control', rows: '3' %>
    </div>
      <%= f.hidden_field :commenter, value: current_user.name %>
      <%= f.hidden_field :user_id, value: current_user.id %>
    <div class="actions">
        <%= f.submit %>
        <div class='back-button'>
        </div>
    </div>
<% end %>

</div>


非常感谢您的帮助

更新:

这是指向我的github回购的链接。以防万一有人想修补一下


也许我没有抓住要点,但是如果不像类方法那样定义实例方法,或者不创建实例,就不能调用实例方法

错误


CommentsController:类的未定义局部变量或方法“destroy”

因此,如果您调用
CommentsController.destroy
,则在没有实例的情况下调用实例方法
destroy
,因此会生成错误

和这个案子一样

class Foo
  def destroy
    puts "destroy"
  end
end

Foo.destroy
#=> NoMethodError: undefined method `destroy' for Foo:Class
但你可以做到

class Bar
  def self.destroy
    puts "destroy"
  end
end

Bar.destroy
# => "destroy"
或者这样称呼它

Foo.new.destroy
# => "destroy"

我错了吗?

尝试将comment对象与destroy方法一起作为参数发送,以便控制器能够识别它

你必须得到那篇文章的帖子,并根据我给出的链接删除评论

def销毁
@post=post.find(参数[:post\u id])
@comment=@post.comments.find(参数[:id])
@毁灭
将_重定向到post_路径(@post)
结束

应该在路径中传递post对象,因为comments资源嵌套在posts下

<%= link_to 'Delete', post_comment_path(post, comment), method: :delete, class: 'delete-link' %>



好的,我看了一下回购协议。您有一个注释表,但没有模型
rails生成模型注释

您能发布错误吗?CommentsController的未定义局部变量或方法'destroy':类您有销毁操作的路径吗?
CommentsController
中的方法
destroy
是实例方法,所以您是这样调用它的吗<代码>CommentsController.new.destroy
不,我没有销毁操作的路径。它嵌套在Posts控制器下。参考资料:帖子做参考资料:评论我想我明白你的意思了。我可以在我的页面中创建和查看我的帖子,这意味着我已经成功地实例化了一条评论。不过有点奇怪,因为这与rails教程中的代码完全相同。@Stormtropper应用程序控制器中的内容是什么?或者您是否创建了
CommentsController
somewere的实例?我试着弄清楚这是怎么回事:上面提到的DCommentController,ApplicationController内部没有任何相关内容,只是一些Desive之类的东西。@StormTrooper,您是否创建了
CommentsController
的实例?或者你是说
destroy
方法是class方法吗?@StormTrooper Sou你需要创建新实例或将
destroy
设置为class方法。请在代码中尝试。谢谢您的关注。尝试运行此代码段。因为我的注释嵌套在posts控制器下。我用post_comment_path(comment)代替comment_path(comment)。。。返回的错误是。。。“没有路由匹配{:action=>“show”,:controller=>“comments”,:id=>nil,**某些注释参数***缺少必需的键:[:id]”请给出'method::delete'以转到销毁操作,如果没有给出,则转到显示操作。您在comments controller中有销毁方法?给出rake路由的输出是的,我这样做了,很抱歉没有发布完整语法。这是我运行的代码。…结果相同。没有路由匹配。@Dias这是我的路由输出。这也输出了一个错误,即我的@comment=@post.comments.find(params[:id])行有一个未定义的方法。