Rails嵌套表单提交成功但Review数据未持久化问题排查
解决Rails嵌套表单中"Unpermitted parameter: reviews_attributes"的问题
Hey Sarah, 看了你的代码和日志输出,问题根源一眼就能找到——参数强过滤的键名写错了!
问题分析
日志里明确显示提交的参数包含reviews_attributes(复数形式),但你的AlbumsController里的album_params方法写的是review_attributes(单数),Rails没法识别这个参数,直接把它拦下来了,导致Review数据根本没被保存。
修复步骤
修正参数允许规则
打开AlbumsController,找到private部分的album_params方法,把单数的review_attributes改成复数的reviews_attributes,同时建议把:user_id也加入允许列表(和你代码里关联当前用户的逻辑匹配):def album_params params.require(:album).permit(:artist, :title, :avatar, :user_id, reviews_attributes:[:title, :date, :content, :user_id]) end确认模型配置正确
你的Album模型已经正确设置了accepts_nested_attributes_for :reviews,new动作里也执行了@album.reviews.build来初始化嵌套的review对象,这两部分没问题,不用修改。
额外的小提醒
注意你的AlbumsController#show动作里有个小问题:
def show @review = @album.reviews.build @review.user = current_user @review.save # 这里会每次访问show页面就创建一条空review! @reviews = Review.recent #scope end
每次用户访问专辑详情页,这段代码都会创建并保存一条空的Review记录,时间长了数据库会积累大量无效数据。建议去掉@review.save,只初始化对象用于后续的评论表单:
def show @review = @album.reviews.build @review.user = current_user @reviews = Review.recent end
做完这些修改后,重新提交表单,Review应该就能和Album一起正常保存了~
内容的提问来源于stack exchange,提问作者sarah
相关产品推荐
相关产品推荐

