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

时间:2013-08-21 09:37:19

标签: ruby-on-rails validation validates-uniqueness-of

我有一个模型Userhas_many Profile。我还有Report模型,belongs_to Profile

如何确保一个用户只有一个报告?像

这样的东西
class Report
  validate_uniqueness_of profile_id, scope: :user 
end

会很棒,但当然不行。 (我不想将用户字段附加到报告,因为它混淆了所有权链。)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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