2011-12-14 9 views
0

Courseには多くのLessonsがあり、うまく動作しているJSドラッグアンドドロップウィジェットでユーザによって選択されます。Railsに組み込まれている関連付けに依存するバリデーション

ここでのparamsの関連部分は、私は2回の授業を選択したときです:の合計は、いくつあるかを含め、

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

+0

また、これを実装しているうちに、ただのレッスンではなく、コースレスの存在を実際に検証する必要があることを学びました。 – doctororange

+0

もちろん、関連があればcourse_lessons:course_lessons :)私はちょうどこのチェックのためにレッスンを言った。「レッスンをしないと?」 - 実際の関連名 – alony

関連する問題