验证多态关联中模型的一个或多个实例的限制

时间:2017-01-10 04:48:40

标签: ruby-on-rails validation

我有一个模型照片多态关联,这些关联应该包含其他模型使用的照片,例如发布和个人资料。

我试图验证:

  1. Post的每个实例只能与Photo
  2. 的一个实例相关联
  3. Profile的每个实例都可以与Photo的一个或多个实例相关联。
  4. 我试图在我的Photo模型中使用以下验证码而没有成功

     class Photo < ApplicationRecord
      belongs_to :photoable, polymorphic: true
      validates_uniqueness_of :photoable_id, scope: :photoable_type
    end
    

    我假设此验证中的范围会指示Rails仅针对每个:photoable_type拒绝重复ID,但实际发生的是Rails拒绝任何重复ID,无论该类型是否设置为&# 39;简介&#39;或者&#39;发布&#39; (例如,我只能有一个Photo with photoable_id = 1的实例,而我希望我有两个具有相同photoable_id的实例,只要一个有photoable_type ==&#39; Profile&#39;另一个是photoable_type ==& #39;发布&#39;)

    您能否帮助解释如何实现这一目标以及为什么范围不会像这样起作用?离开范围可能是相同的结果:: photoable_type&#39;超出验证码。

    以下其他2个型号中的代码:

    发布模型

    class Post < ApplicationRecord
      has_one :photo, as: :photoable
    end
    

    个人资料模型

    class Profile < ApplicationRecord
      has_many :photos, as: :photoable
    end
    

1 个答案:

答案 0 :(得分:0)

我使用以下帖子中建议的代码来解决问题。 https://drill.apache.org/

在这种情况下,工作解决方案将是:

  validates_uniqueness_of : photoable_id, scope: [: photoable_type, :photoable_id]