0

私は次のモデルを持っています:

class Section < ActiveRecord::Base
  belongs_to :course                                                          
  has_one :term, :through => :course
end

class Course < ActiveRecord::Base
  belongs_to :term
  has_many :sections
end

class Term < ActiveRecord::Base
  has_many :courses
  has_many :sections, :through => :courses
end

Sectionモデル (call_numberは のフィールドSection)で次のことを実行できるようにしたいと考えています。

validates_uniqueness_of :call_number, :scope => :term_id

がないため、これは明らかに機能しません。Sectionでは、スコープを関係のモデルに制限するにはどうすればよいですか?term_id

無駄なカスタムバリデーターを作成しようとしました( 「nil:NilClassの未定義メソッド「セクション」」というエラーSectionで新しいバリデーターを作成すると機能しません):Section

def validate_call_number
  if self.term.sections.all(:conditions => ["call_number = ? AND sections.id <> ?", self.call_number, self.id]).count > 0
    self.errors[:base] << "Call number exists for term"
    false
  end
  true
end

どうもありがとう!

4

1 に答える 1

0

検証コードが正しいと仮定すると、単純に用語の存在チェックを追加してみませんか?

def validate_call_number
  return true if self.term.nil? # add this line
  if self.term.sections.all(:conditions => ["call_number = ? AND sections.id <> ?", self.call_number, self.id]).count > 0
    self.errors[:base] << "Call number exists for term"
    false
  end
  true
end
于 2011-07-20T22:15:15.423 に答える