2012-05-25 61 views
0

我有4種型號驗證:SchoolClassTimetableLessonReporting的Rails 3 - 通過幾個型號

# class_code :string(255) 
class SchoolClass < ActiveRecord::Base 
    has_many :timetables 
end 

class Timetable < ActiveRecord::Base 
    belongs_to :school_class 
    has_many :lessons 
end 

class Lesson < ActiveRecord::Base 
    belongs_to :timetable 
    has_one :reporting 
end 

# report_type :string(255) 
class Reporting < ActiveRecord::Base 
    belongs_to :lesson 

    validates :report_type, 
       :presence => true, 
       :inclusion => { :in => %w(homework checkpoint)} 
end 

我如何可以驗證每個SchoolClass只能有1 Reporting,類型爲 「關卡」?

回答

1

由於嵌套關聯,這會變得非常複雜。 我會開始使用自定義驗證方法。

在SchoolClass模型

validate :only_one_reporting_checkpoint 

,然後方法:

def only_one_reporting_checkpoint 
    timetables = self.timetables 
    reporting_checkpoint = nil 
    timetables.each do |t| 
    t.lessons.each do |l| 
     reporting_checkpoint = true if l.reporting.report_type == "checkpoint" 
    end 
    end 
    if reporting_checkpoint == true   
    errors.add(:reporting, "exception raised!") 
    end 
end 

在那裏,我認爲做的。如果我正確理解你的問題。