2015-08-30 53 views
1

工作,我有以下3類:Rails的validates_uniqueness_of和範圍 - 只在更新

class Profile < ActiveRecord::Base 
end 

class Subject < ActiveRecord::Base 
end 

class ProfileSubject < ActiveRecord::Base 
    belongs_to :profile 
    belongs_to :subject 

    validates_uniqueness_of :subject_id, scope: :profile_id 
end 

當我與他相關的ProfileSubject的收集更新我的資料這個validates_uniqueness_of的偉大工程。但是,在創造行動 - 它沒有驗證這種獨特性。我想,也許這是因爲當我創建對象時,我還沒有profile_id ...並且我嘗試爲模型添加我自己的令牌,我可以使用它來連接它們並進行驗證(在範圍validates_uniqueness_of上使用它)。廣告我現在知道,它沒有用,也沒有工作。

你能幫助我...爲什麼這個標準驗證在更新操作上工作正常..但不適用於創建操作。

創建代碼是標準的,是這樣的:

@profile = Profile.new(profile_params) 

    if @profile.save 
     # ... 
    else 
     # ... 
    end 
+1

,你能否告訴我們創造的代碼? – tompave

回答

0

用途:

validates_associated :subject, :profile 
validates :subject, :profile, :presence => true 

在代替:

validates_uniqueness_of :subject_id, scope: :profile_id 
+0

我不需要只有主題和個人資料。我需要個人資料範圍內的主題獨特性。在我的應用程序中,意味着Profile可以包含許多ProfileSubject,並且在此配置文件的範圍內,這些ProfileSubjects需要具有唯一性主題 –