ruby-on-rails – 两种型号,一种STI和一种验证
发布时间:2020-12-17 02:26:46 所属栏目:百科 来源:网络整理
导读:假设我有两张桌子 – 产品和订单.为简单起见,假设一次只能购买一个产品,因此没有像order_items这样的连接表.所以关系是产品有很多订单,订单属于产品.因此,product_id是Order表中的fk. 产品表是STI – 子类是A,B,C. 当用户订购子类产品C时,必须在订单模型字段
假设我有两张桌子 – 产品和订单.为简单起见,假设一次只能购买一个产品,因此没有像order_items这样的连接表.所以关系是产品有很多订单,订单属于产品.因此,product_id是Order表中的fk.
产品表是STI – 子类是A,B,C. 当用户订购子类产品C时,必须在订单模型字段order_details和order_status上检查两个特殊验证.对于所有其他Product子类(即A和B),这两个字段可以为nil.换句话说,当用户购买A和B时,不需要为这两个字段运行验证. 我的问题是: 如何在Order模型中编写验证(可能是自定义?),以便Order模型知道只运行ITS两个字段的验证 – order_details和order_status – 当fk_id到Product子类C被保存到orders表时? 解决方法
关键是在Order模型中添加validate方法以检查细节:
def validate if product and product.type_c? errors.add(:order_details,"can't be blank") if order_details.blank? # any other validations end end 或类似的规定.只需检查验证中的类型并添加相应的错误.我刚刚组成了type_c?功能.只需检查类型,但定义了您的产品型号. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |