【问题标题】:How can I validate uniqueness of another association key?如何验证另一个关联键的唯一性?
【发布时间】:2017-04-28 04:37:45
【问题描述】:

我有一个ClothRecord 模型。而这个模型属于OrderItem模型。并且也属于Cloth 型号。而这个Cloth 模型有kind 列。

在这种情况下,会创建新的ClothRecord 记录。这条记录有一个布类栏目是'shell'。并创建了另一个ClothRecord。这张唱片也有布。但这条记录不应该有相同的kind 列。但是如果这条记录属于另一个OrderItem,那就没问题了。所以我认为下面的代码有效,但没有。

class ClothRecord < ApplicationRecord
  belongs_to :cloth
  belongs_to :order_item

  validates_uniqueness_of :cloth_kind, scope: :order_item_id

  def cloth_kind
     cloth.kind
  end
end

我应该编写自定义验证方法吗?如果我应该如何编码这个复杂的验证?

【问题讨论】:

    标签: ruby-on-rails validation model associations


    【解决方案1】:

    我认为你想要的很奇怪,但你可能可以使用 自定义验证方法 来做这样的事情(未经测试)

    class ClothRecord < ApplicationRecord
      belongs_to :cloth
      belongs_to :order_item
    
      validate :record_uniqueness
    
      def cloth_kind
         cloth.kind
      end
    
      def record_uniqueness
        similar = ClothRecord.joins(:cloth)
          .exists?('clothes.kind = ? AND order_items.id = ?', cloth_kind, order_item)
    
        errors.add(:cloth, "must be unique to order item") if similar
        # You can add the error to :order_item_id too
      end
    end
    

    我认为如果你能确保ClothRecord + Cloth + OrderItem 的唯一性,这样会更容易

    validates_uniqueness_of :cloth, scope: :order_item_id
    

    您还可以检查validates_uniqueness_of:conditions 参数,您可以在其中为where 指定额外的查询片段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多