rails 4验证关联的对象+ db约束

肖恩·玛雅(Sean Magyar)

我正在尝试对rails中的外键字段和postgres db中的约束添加验证。

假设有一个userUser has_many :productsproduct belongs_to :user在这种情况下,情况很容易,因为肯定会在添加新产品时创建用户。因此validates: user, presence: true可以添加到中product modeluser_id, null: false也可以添加到中postgres db

但是如果父子对象和该对象同时创建怎么办。假设在product form我具有product_featuresas嵌套属性中。所以product has_many :product_featuresproduct_feature belongs_to :product

根据Rails 4 Way的说法:“当您尝试确保存在关联时,请传递其外键属性而不是关联变量本身的validates_presence_。注意,在父对象和子对象都未保存的情况下,验证将失败(因为外键将为空白)。”

在这种情况下,如何在外键字段上实现模型验证和db约束?

斯玛西

事实是,验证密钥本身(例如product_id)的存在是完全没有用的,因为@product_feature.product_id = -25它将通过验证。

我总是对关联进行在线状态验证:

validates :product, presence: true

无论您以哪种方式创建对象,该方法都将起作用:

ProductFeature.new product: Product.new

...或者...

Product.new product_features: [ ProductFeature.new ]

我不确定为什么有人会推荐其他任何东西,对密钥本身进行验证并不能保证该密钥存在于数据库中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails 4:使用表单对象时验证关联的ActiveRecord模型

来自分类Dev

关联对象相关属性的复杂Rails验证

来自分类Dev

Rails 4在保存时创建关联对象

来自分类Dev

验证关联Rails的存在

来自分类Dev

验证关联Rails的存在

来自分类Dev

如何对关联对象动态提供的属性使用 Rails 验证

来自分类Dev

Rails 4 HABTM自定义关联验证

来自分类Dev

Rails 4:区别在于验证ID或关联上的存在

来自分类Dev

Rails 4模型关联左联接验证ID

来自分类Dev

将对象与特定的日期正确关联(SQL和Rails 4)

来自分类Dev

关联条件Rails 4

来自分类Dev

关联条件Rails 4

来自分类Dev

构建关联 Rails 4

来自分类Dev

验证Rails中的关联模型

来自分类Dev

如何在 Rails 中获取 ApplicationRecord 模型的验证约束?

来自分类Dev

Rails 3:通过关联项验证至少一个存在多个对象

来自分类Dev

Rails 4:form_for与关联

来自分类Dev

Rails 4多个ActiveRecord关联

来自分类Dev

Ruby on Rails 4中的关联

来自分类Dev

Rails 4,嵌套关联搜索

来自分类Dev

编写关联范围-Rails 4

来自分类Dev

Rails 4:与指定属性关联的父对象已经存在时,禁止创建父对象

来自分类Dev

编写范围以显示没有关联对象的对象-Rails 4

来自分类Dev

如何使用RSpec和Rails 4测试子域约束

来自分类Dev

Rails 4 I18n:在关联验证消息中使用人体模型名称

来自分类Dev

Rails 4级联保存关联和对belongs_to的验证

来自分类Dev

Rails 4的价格验证

来自分类Dev

Rails 4验证问题

来自分类Dev

Rails根据关联记录进行验证