加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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?功能.只需检查类型,但定义了您的产品型号.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读