我有一个型号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