1

我有一個用rails寫的mediaserver,它允許用戶上傳圖像並對它們進行分類。 我現在正在製作相當複雜的情緒板功能。在保存之前驗證多個嵌套屬性關聯模型的相等性

要開始我們有一個Template模型。這Template模型has_many TemplateBlocks。 A TemplateBlock具有屬性width,height,top,leftposition。這些選項可以讓您輕鬆生成css代碼和pdf。 TemplateBlock表還包含template_id的列。

接下來我們有一個Moodboard其HAS_MANY Documents通過MoodboardImages

class Moodboard < ActiveRecord::Base 

    has_many :documents, through: :moodboard_images 
    has_many :moodboard_images, dependent: :destroy 

    accepts_nested_attributes_for :moodboard_images 

end 

MoodboardImages表包含一個多列是template_block_id以確定Template

位置因爲它是現在一切都可以正常使用,但我需要驗證MoodboardImage創建。 當保存具有嵌套屬性的Moodboard時,對於具有相同template_idMoodboardImage應該有限制。一個Moodboard顯然不能包含多個模板。

我給你們的問題是我怎樣才能完成這個驗證儘可能乾淨?

我當然可以寫一個方法,從數據庫中抓取TemplateBlock並臨時存儲並比較它或其他東西,但這並不美觀。我想知道是否有一個「好」或「好」的方法來做到這一點。

+0

請問你'Moodboard'模型?你可以在那裏添加驗證,不是? – sebkkom 2014-09-25 15:06:02

+2

'Moodboard'模型並不特別,它只有一個名稱列。關係使得情緒板和我可以在'Moodboard'模型中添加驗證,但它需要查詢新的'MoodBoardImage'的template_block_id以確保template_blocks都具有相同的模板_id – 2014-09-25 15:20:58

回答

0

驗證看起來像

validates :template_id, :uniqueness => {:scope => :moodboard_id} 

參考rails guides

+1

'template_id'不在' MoodBoardImage'模型中,需要從關聯的'TemplateBlock'中檢索模板ID,以便爲此工作軌需要查詢數據庫以查找相關的塊,我認爲? – 2014-09-26 09:38:20