【问题标题】:Strong Parameters: ActiveModel::ForbiddenAttributesError强参数:ActiveModel::ForbiddenAttributesError
【发布时间】:2020-10-25 02:43:29
【问题描述】:

假设我有一个 PostsController,我有一个 Post 模型和 Comment 模型。我允许在帖子上制作 cmets,所以在我的帖子/节目中我放了以下内容

 # routes.rb
 resource :post do 
   member do 
      post :add_comment
    end
 end

 # post.rb
 has_many :comments

 # comment.rb
 belongs_to :post
<%= form_with(model: @post, url: add_comments_post_path) do |form| %>
   <%= form.text_area :body %>
<% end %>
# posts_controller

def add_comment
  post = Post.find(params[:id])
  post.comments.create(params[:comment])
end

private 
params.require(:post).permit(:title, :body)

我尝试在许可上添加:comment,但它引发了ActiveModel::ForbiddenAttributesError

【问题讨论】:

  • 检查服务器日志,你会看到请求的参数,你必须复制它。需要/允许什么取决于实际的表单输入,因为您没有显示输入,所以很难说。如果您不确定,请提交其中一种表单并在此处复制该请求的日志。
  • 是参数 {comment => {:body => "message}, id => 1}
  • @Berimbolo 你能发布错误日志吗?
  • ActiveModel::ForbiddenAttributesError

标签: ruby-on-rails ruby-on-rails-5 strong-parameters


【解决方案1】:

我得到了像这样修复的强参数 ActiveModel::ForbiddenAttributesError:

params.require(:post).permit(:title, :body, comment_attributes: [:body])

【讨论】:

  • 如果它解决了您的问题,您可以接受它作为答案。
【解决方案2】:

根据您的评论,您必须这样做:

post = Post.find(params[:id])
post.comments.create(comment_params)

并允许它:

private
def comment_params
  params.require(:comment).permit(:title, :body)
end

【讨论】:

  • 我试过了,在日志中添加了第二个强参数但我禁止属性错误
  • 更新问题,添加控制器代码和请求日志
  • 另外,关于你在做什么,有一个完整的 rails 官方指南,我建议你先阅读这个guides.rubyonrails.org/getting_started.html(这是一个包含帖子和 cmets 的博客示例应用程序,所有代码都包含步骤和解释)
  • 我看到你复制了控制器的代码,这不是我在这个答案中提出的,第一部分是 add_comment 操作,第二部分是强参数部分。我不确定你尝试了什么。
  • 我按照您的方式更新了控制器和表单。还是一样的错误,params[:comment] 还是错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多