我有一個模型User
,其中has_many
Profile
。我也有Report
型號,其中belongs_to
Profile
。Rails根據另一個表驗證屬性的唯一性
如何確保一個用戶只有一個報告?類似於
class Report
validate_uniqueness_of profile_id, scope: :user
end
會很好,但它當然不起作用。 (我不想將用戶字段添加到報告,因爲它混合了所有權鏈)。
我有一個模型User
,其中has_many
Profile
。我也有Report
型號,其中belongs_to
Profile
。Rails根據另一個表驗證屬性的唯一性
如何確保一個用戶只有一個報告?類似於
class Report
validate_uniqueness_of profile_id, scope: :user
end
會很好,但它當然不起作用。 (我不想將用戶字段添加到報告,因爲它混合了所有權鏈)。
只是給你一個關於如何實現自定義驗證的想法。選中此項
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
每個配置文件都會有不同的報告。 – AdamNYC
您必須使用自定義驗證。 Rails不允許在模型範圍之外驗證唯一性 – techvineet
Hi techvineet:你能建議我該怎麼做嗎? – AdamNYC