我有一个模型User
,has_many
Profile
。我还有Report
模型,belongs_to
Profile
。
如何确保一个用户只有一个报告?像
这样的东西class Report
validate_uniqueness_of profile_id, scope: :user
end
会很棒,但当然不行。 (我不想将用户字段附加到报告,因为它混淆了所有权链。)
答案 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