所以我开始掌握permit
(Rails的新手,当然还有rails 4)。
当我通过路径传递参数时,例如form_for(@comment, :url => post_comments_path(@post.id))
日志显示它正在以以下格式传递:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"UKBczLBwbh/AF2XSTlWmPJcFEcgTSXA9PBE6VP6sD4k=",
"user"=>{"first_name"=>"Jim Friner", "email"=>"jfriner@gmail.com"}, "comment"=>{"content"=>"Hey dudez"},
"commit"=>"Create Comment", "post_id"=>"1"}
如您所见,帖子 ID 未被用户或评论包装。它不是哈希中的哈希。我找到的大多数教程和关于如何使用许可证的答案都假设它是提交的表单,因此在user
或comment
内。他们提出以下建议:
params.require(:user).permit(:first_name, :email)
但是在这种情况下,没有什么可以放置的require,所以我想我的问题是,我只是省略了require并且它应该有效还是我做这样的事情:
params.require(:post_id).permit(:post_id)
或者只是
params.permit(:post_id)
谢谢!
Rails 4 中的强参数是 attr_accessible
的替代品,因此并不意味着过滤所有参数,只是那些通过表单提交的参数来阻止模型设置某些属性。
在这种情况下,post_id
参数用于路由,因此您可以通过before_action
对其进行筛选,但不能使用强参数来执行此操作。