【问题标题】:Rails - Polymorphic Associations- Best Practices to handle optional associationRails - 多态关联 - 处理可选关联的最佳实践
【发布时间】:2019-11-12 08:02:58
【问题描述】:

我有一个模型 StockEntry 属于 stock_logable 例如:InvoiceItemReturnItem 等。我的模型看起来像这样:

belongs_to :stock_logable, polymorphic: true, optional: true

现在我需要处理开仓的情况。我是这样处理的:

id:                  1
stock_logable_type: "Opening Stock",
stock_logable_id:    nil
quantity:            10

所以基本上我把stock_logable_id留空,stock_logable_type留了一个字符串。我的应用程序中没有任何模型,例如“OpeningStock”。

尽管这很有效,但我仍然不确定这是否是处理相关场景的好方法。任何见解/反馈都会有所帮助。谢谢

【问题讨论】:

    标签: ruby-on-rails ruby activerecord associations


    【解决方案1】:

    我不知道您的业务领域,但我宁愿创建一个OpeningStock 模型并将stock_logable 设置为它。设置没有 id 的多态类型可能会导致严重的错误。

    您也可以在StockEntries 中进行 STI,然后保持开盘股票。或者甚至没有任何继承 - 您可以将状态添加到 StockEntry 以标记它是开放的还是常规的。

    【讨论】:

    • 拥有一个单独的OpeningStock 模型和一个表似乎过于工程化。加上 opening_stocks 表与 stock_entries 表没有太大区别。有没有更好的处理方法?
    • 您可以在StockEntries 中进行 STI,然后保持开仓。甚至没有任何继承 - 您可以将 state 添加到 StockEntry 以标记它是开放的还是常规的。
    • 将其添加到我的答案中。
    【解决方案2】:

    我猜你首先创建了StockEntry,但目前还没有可用/链接的“可登录”(我个人更喜欢“可登录”),这是一个特殊的状态,称为“期初股票” “, 正确的?您现在似乎使用stock_logable_type 来反映这种状态。这要么是因为您也有 StockEntry 而没有 stock_logable 出于不同的原因,还是为了使您的代码/数据更加不言自明?

    因此,如果有其他状态,我会创建一个实际状态(使用枚举或链接到域表),否则我将完全不分配 stock_logable,并可能添加一个方便的方法

      def opening_stock? 
        stock_logable.blank? 
      end 
    

    让您的代码更具可读性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多