2013-08-21 131 views
1

我有一個模型User,其中has_manyProfile。我也有Report型號,其中belongs_toProfileRails根據另一個表驗證屬性的唯一性

如何確保一個用戶只有一個報告?類似於

class Report 
    validate_uniqueness_of profile_id, scope: :user 
end 

會很好,但它當然不起作用。 (我不想將用戶字段添加到報告,因爲它混合了所有權鏈)。

+0

您必須使用自定義驗證。 Rails不允許在模型範圍之外驗證唯一性 – techvineet

+0

Hi techvineet:你能建議我該怎麼做嗎? – AdamNYC

回答

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 
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 
+0

每個配置文件都會有不同的報告。 – AdamNYC