我昨晚开始玩Rails 4。我正在制作一个简单的博客类型的应用程序,以熟悉一些变化。我的帖子使用默认的脚手架。
我决定在没有脚手架的情况下添加评论,当我尝试在帖子上保存评论时出现此错误:
ActiveModel::ForbiddenAttributesError in CommentsController#create
请求参数错误页面:
{"utf8"=>"✓",
"authenticity_token"=>"jkald9....",
"comment"=>{"commenter"=>"Sam",
"body"=>"I love this post!"},
"commit"=>"Create Comment",
"post_id"=>"1"}
这是评论控制器的创建动作:
class CommentsController < ApplicationController
def create
@post = post.find(params[:post_id])
@comment = @post.comments.create(params[:comment])
redirect_to post_path(@post)
end
private
def comment_params
params.require(:comment).permit(:commenter, :body, :post_id)
end
end
以下是我的评论的基本迁移。
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.string :commenter
t.text :body
t.references :post, index: true
t.timestamps
end
end
end
我对强类型params做错了什么?或者在Rails 4中还有其他一些我失踪的东西?
答案 0 :(得分:4)
有点疏忽,但我想我会回答这个问题,以防其他人正在努力将类似的Rails 3代码移植到Rails 4。
您需要将comment_params传递到质量分配中,如下所示:
@comment = @post.comments.create(comment_params)
答案 1 :(得分:1)
我通过将comments_controller创建函数编辑为
来解决这个问题def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment].permit(:commenter, :body))
redirect_to post_path(@post)
end
请注意
@comment = @post.comments.create(params[:comment].permit(:commenter, :body))
最好的问候