2010-07-25 38 views
0

我有一個具有兩個關聯(文檔和嚮導)的簡歷模型。文檔是上傳的簡歷,而嚮導是用戶使用簡歷嚮導的輸出。這些是相互排斥的模型。如何驗證用戶在驗證簡歷時創建了文檔或嚮導?驗證互斥關聯的存在

我在我的簡歷控制器中建立關聯。

 
if params[:document] 
    @document = @resume.build_document(params[:document]) 
else 
    @wizard = @resume.build_wizard(params[:wizard]) 
end 

然後,我要做一個resume.save或resume.update_attributes(params [:resume])。

回答

2

使用多態性has_one/belongs_to。然後,你可以指定documented屬性您Resume對象:

class Resume < ActiveRecord::Base 
    belongs_to :documented, :polymorphic => true 

    # this line validates the presence of associated object (Wizard or Document) 
    validates_associated :documented 
end 

class Document < ActiveRecord::Base 
    has_one :resume, :as => :documented 
end 

class Wizard < ActiveRecord::Base 
    has_one :resume, :as => :documented 
end 

>> document = Document.create(...) 
>> resume = Resume.find(...) 
>> resume.documented = documented 
>> resume.save! 
>> resume.documented.class # => Document 
>> wizard = Wizard.create(...) 
>> resume.documented = wizard 
>> resume.save! 
>> resume.documented.class # => Wizard 
+0

技術上的簡歷是父。 – 2010-07-25 18:10:25

+0

驗證如何顯示? – 2010-07-25 18:11:58

+0

使用嚮導或文檔驗證更新了代碼。 – Eimantas 2010-07-25 18:23:28