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])行有一个未定义的方法。