Ruby on Rails中用户、文章与评论的关联问题求助
解决Ruby on Rails评论模型user_id自动填充问题
Rails不会自动填充所有外键,必须通过关联对象的方法创建评论,而非直接初始化Comment实例。你的post_id能正常填充,说明是通过@post.comments关联创建的,但user_id为空是因为没绑定当前登录用户。
具体解决方案:
修正控制器的评论创建逻辑
假设你的CommentsController中create方法需要这样写(核心是通过已关联的用户/文章对象创建评论):def create @post = Post.find(params[:post_id]) # 借助当前登录用户对象关联创建,current_user由Devise等认证系统提供 @comment = @post.comments.create(comment_params.merge(user: current_user)) # 也可以通过用户关联创建:@comment = current_user.comments.create(comment_params.merge(post: @post)) if @comment.save redirect_to @post else render 'posts/show' end end private def comment_params params.require(:comment).permit(:body) end这种方式下,Rails会自动填充
user_id和post_id两个外键。优化模型验证规则
将Comment模型中的外键验证改为关联对象验证,更贴合Rails关联设计:class Comment < ApplicationRecord belongs_to :post belongs_to :user validates :body, presence: true validates :user, presence: true # 替换原validates :user_id, presence: true validates :post, presence: true # 替换原validates :post_id, presence: true end确认路由与认证状态
- 确保路由是嵌套结构,能正确传递
post_id:resources :posts do resources :comments end - 确认
current_user能正确获取当前登录用户(如果用Devise等认证gem,这一步默认已处理;自定义认证需自行实现当前用户的获取逻辑)。
- 确保路由是嵌套结构,能正确传递
内容的提问来源于stack exchange,提问作者Yasar F
相关产品推荐
相关产品推荐

