Ruby on Rails使用Devise注册时自动生成带评论的嵌套首帖如何实现
解决方案
你之前的写法存在两个核心问题:
Comment模型仅和Post存在关联,和User没有直接关联,直接调用resource.comments.build属于调用不存在的关联方法Post.create接收的是键值对形式的属性参数,你直接传入构建好的评论对象不符合参数规范
你可以直接用更简单的链式关联创建方式实现需求,无需额外修改模型配置:
class Users::RegistrationsController < Devise::RegistrationsController after_action :auto_generate_post, only: [:create] def auto_generate_post # 仅当用户实际注册成功保存到数据库后才执行创建逻辑,避免生成无效数据 return unless resource.persisted? # 通过用户关联创建帖子,自动填充user_id字段 post = resource.posts.create(title: 'Test post', content: 'This post is posted by automatically.') # 通过帖子关联创建评论,自动填充post_id字段 post.comments.create(content: 'test comment') end end
如果你希望一次性完成帖子和评论的创建,可以开启嵌套属性配置:
- 首先修改Post模型,添加嵌套属性支持
class Post < ApplicationRecord belongs_to :user has_many :comments # 允许接收评论的嵌套属性 accepts_nested_attributes_for :comments end
- 修改控制器创建逻辑
def auto_generate_post return unless resource.persisted? resource.posts.create( title: 'Test post', content: 'This post is posted by automatically.', comments_attributes: [{content: 'test comment'}] ) end
两种方案都可以实现需求,第一种写法更直观易维护,更推荐使用。
内容的提问来源于stack exchange,提问作者Mitsunobuk
相关产品推荐
相关产品推荐

