我正在Rails中构建一个相当基本的应用程序,使用两个主要控制器,用户和注释。我正在使用Bcrypt并且具有用于用户加密的secure_password和嵌套资源,因此用户has_many评论和评论belongs_to user。
当我尝试保存新评论时,我收到的错误消息如下:注释的未知属性“user_id”。似乎user_id没有传递给控制器,虽然这应该使用评论控制器中定义的current_user来完成 - 目前看起来像这样:
def new
@user = current_user
@comment = Comment.new
@comment.save
end
def create
@user = current_user
@comment = @user.comments.new(comment_params)
@comment.save
redirect_to user_comments_path, notice: "Thank you for your comment!"
end
...
private
def comment_params
params.require(:comment).permit(:user_id, :location, :title, :body)
end
当我尝试保存我登录的评论时,所以我不确定为什么user_id不会传递给控制器。我非常感谢你的建议,谢谢。
答案 0 :(得分:0)
当我尝试保存新评论时,我收到的错误消息是 以下内容:“注释的未知属性'user_id'。
使用belongs_to
关联关联时,您必须实际向表中添加列以存储外键。
您可以使用以下命令生成迁移:
rails g migration add_user_id_to_comments user:belongs_to
然后使用rails db:migrate
进行迁移。
你的控制器也有很多问题:
def new
@comment = current_user.comments.new
# never save in new method!
end
def create
@comment = current_user.comments.new(comment_params)
# you always have to check if save/update was successful
if comment.save
redirect_to user_comments_path, notice: "Thank you for your comment!"
else
render :new
end
end
没有必要将current_user
保存到单独的实例变量中,因为您应该记住它。
def current_user
@current_user ||= session[:user_id] ? User.find(session[:user_id]) : nil
end