所以我开始处理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"}
如您所见,Post Id未被用户或评论包装。它不是哈希中的哈希。
大多数教程和我在如何使用许可证上找到的答案都假设它是提交的表单,因此在user
或comment
内。他们建议如下:
params.require(:user).permit(:first_name, :email)
然而在这种情况下,没有什么可以提出要求,所以我想我的问题是,我只是省略要求它应该工作或者我做这样的事情:
params.require(:post_id).permit(:post_id)
或只是
params.permit(:post_id)
谢谢!
答案 0 :(得分:3)
Rails 4中的强参数是attr_accessible
的替代,因此不是用于过滤所有参数,只是用于通过表单提交的参数来阻止模型设置某些属性。
在这种情况下,post_id
参数用于路由,因此您可以通过before_action
对其进行过滤,但不能使用强参数来执行此操作。