2011-12-14 34 views
0

A Course有許多Lessons,它們是用戶使用JS拖拽式窗口小部件選擇的,它工作正常。驗證依賴於在Rails中構建的關聯

這裏的則params的相關部分,當我選擇兩個教訓:

Parameters: { 
    "course_lessons_attributes"=>[ 
    {"lesson_id"=>"43", "episode"=>"1"}, 
    {"lesson_id"=>"44", "episode"=>"2"} 
    ] 
} 

我想執行的@course一些驗證,它是一套新的課程,包括有多少,的總和課程價格和其他東西。這裏有一個例子:

課程模式

validate :contains_lessons 
def contains_lessons 
    errors[:course] << 'must have at least one lesson' unless lessons.any? 
end 

我的問題是,該課程和經驗之間的關聯過程中保存之前尚未建成,就在那個時候我想向他們打電話爲我的驗證(使用course.lessons)。

執行依賴關聯的自定義驗證的正確方法是什麼?

謝謝。

回答

0

您不能訪問course.lessons,但course_lessons在那裏,所以我最終在驗證方法中做了這樣的事情來訪問這些課程。

def custom validation 
    val_lessons = Lesson.find(course_lessons.map(&:lesson_id)) 
    # ... 
    # check some things about the associated lessons and add errors 
    # ... 
end 

我仍然樂意提供更好的方法來做到這一點。

2

看起來你並不需要一個自定義的驗證這裏,可以考慮使用這一個:

validates :lessons, :presence => true 

validates :lessons, :presence => {:on => :create} 
+0

你對這個特定的驗證是正確的,但不幸的是還有其他的需要我迭代課程集。感謝您的回答。 – doctororange 2011-12-14 09:43:43