ruby-on-rails - Rails:保存子对象时如何运行父对象验证?
问题描述
我有两个模型, Post 和 User 。代码如下图
class User
has_one :post
validates_associated :post
validates_presence_of :name
end
class Post
belongs_to :user
validates_presence_of :description
#validates_associated :user
end
user = User.new
user.build_post # creating post without description
user.save
user.valid? => false #This is working as expected
post = Post.new
post.build_user
post.save
post.valid? => true
我期待post.valid?返回 false 因为我提供了空的 ' name'
。当我保存帖子对象时,看起来在用户模型上定义的验证没有运行。我不能validates_associated :user
在后期模型中使用,因为它会给出“循环依赖”错误。我的问题是如果validates_associated :user
不能在后期模型中使用,那么还有什么替代方法?
解决方案
根据https://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_associated:
validates_associated 不适用于 has_one 关联
validates
建议在has_one
关联上使用:
class User
has_one :post, validates: true
end
请注意,我没有对此进行测试,只是根据该来源提出建议。
推荐阅读
- c# - 我怎样才能获得像谷歌调查网站上的下拉列表?
- string - Lua 比较多个表值
- python - 如何在python中将文本数据转换为数组
- java - 对象转换 JSON,但 Bigdecimal 错误
- azure-container-service - Azure 容器实例执行时间
- android - Android TimePickerDialog Android 4.4 按钮颜色错误
- statistics - 计算正态单变量分布的 Fisher 信息矩阵
- javascript - 如何访问 DOM 中的元素
- python - 在scrapy中使用自定义方法时无法找出正确的方法
- maven - 准备分析任务失败并出现 ##[error][SQ] API GET '/api/server/version' 仅针对 Azure Devops 中的 Maven 集成失败