Rails根据另一个表验证属性的唯一性



我有一个型号User,它是has_many Profile。我还有Report模型,它是belongs_to Profile

如何确保一个用户只有一个报告?类似的东西

class Report
  validate_uniqueness_of profile_id, scope: :user 
end

那太好了,但当然不行。(我不想将用户字段附加到Report,因为它混淆了所有权链)。

只是让您了解如何实现自定义验证。检查此

class Report
    validate :unique_user
    def unique_user
        if self.exists?("profile_id = #{self.profile_id}")
          errors.add(:profile_id, "Duplicate user report")
        end
    end
end

如果我做对了,那么一个用户的所有配置文件都会有相同的报告,对吧?如果是这样的话,这意味着配置文件属于用户,那么你为什么不这样建模呢?例如:

class User 
  has_many :profiles
  has_one :report
end
class Profile
  belongs_to :user
  has_one :report, through: :user
end
class Report
  belongs_to :user
end

相关内容

  • 没有找到相关文章

最新更新