0

我有以下代码时::加载ActiveModel ForbiddenAttributesError试图在app /控制器/ comments_controller.rb添加新评论

class CommentsController < ApplicationController 
    def create 
    book = Book.find params[:book_id] 
    comment = book.comments.new params[:comment] 
    comment.save 
    flash[:notice] = 'Comment saved' 
    redirect_to book_path(book)  
    end 
end 

我不知道为什么我在行收到错误comment = book.comments.new params[:comment]

我试着改变comment = book.comments.new params[:comment]comment = book.comments.new(comment)但随后它并没有显示在应用程序的评论当我点击保存

还试图做这样的事情下面

class CommentsController < ApplicationController 
    def create 
    book = Book.find params[:book_id] 
# comment = book.comments.new params[:comment] 
    comment = book.comments.new(comment_params)  
    comment.save 
    flash[:notice] = 'Comment saved' 
    redirect_to book_path(book)  
    end 

def comment_params 
    params.require(:comment).permit() 
end 

end 
+0

能否请您看看您的服务器日志('登录/发展。日志“)和/或控制台窗口,并向我们展示* full *错误消息 - 不仅仅是您已经复制的标题,而且还包括在其两侧的几行内容。通常在服务器日志中你会得到一个被传递的实际参数的例子,有时它甚至会告诉你哪些属性被禁止。编辑你的问题,并在那里添加信息(而不是在评论中回复),因为注释中的代码格式是不可读的:P –

+1

另外'params.require(:comment).permit()'这是字面上告诉轨道,是一个'params [:comment]''但是你不允许任何参数在'params [:comment]'中 - 所以如果你真的传递了一些东西(例如'{:content =>“这是一个评论”), :author_id => 1234}'),那么你会得到你所看到的错误。但看着我所要求的日志将证实这一点(以及你需要做些什么来修复它)。 –

+0

谢谢我将它更改为@comment = book.comments.create!(params.require(:comment).permit!),但它在刷新页面后显示注释。我相信它应该显示它,当我保存 – User7354632781

回答

1

这条线(顺便说一句()是可选的)

params.require(:comment).permit() 

只是意味着你允许NO属性被分配,从而错误。

添加属性(白名单它们)的列表,以便能够为它们分配:

params.require(:comment).permit(:name, :title, :other_attribute) 
0

这一个工作

class CommentsController < ApplicationController 
    def create 
    book = Book.find params[:book_id] 
    #comment = book.comments.new params[:comment] 
@comment = book.comments.create!(params.require(:comment).permit!)  
    #comment = book.comments.new(comment_params)  
    #comment.save 
    flash[:notice] = 'Comment saved' 
    redirect_to book_path(book)  

end 
end 
+1

我建议对'params.require(:评论).permit!'出于两个原因。一种 - 传统上你把它放在一个单独的方法中,这样它也可以被编辑/更新操作重用。两个 - 这实际上允许一切......包括允许用户使用他们的控制台添加一个“user_id”字段,从而创建属于另一个用户的评论。你真的不想那样。您应始终列出允许用户更改的属性。这就是首先有这个需求/许可线的目的。 :) –

相关问题