2011-02-24 5 views
2

관련 모델의 다른 필드가 특정 값인 경우에만 한 필드의 유효성을 검사하는 방법을 알아야합니다. 예를 들어 :레일즈 - 다른 모델의 필드 유효성 검사

// 내 모델

class Course < ActiveRecord::Base 
    has_many :locations, :dependent => :destroy 
    accepts_nested_attributes_for :locations 
end 

class Location < ActiveRecord::Base 
    belongs_to :course 
end 

코스가 많은 지역 (주, 도시 등)뿐만 아니라 시작일을 가질 수 있습니다. 내 위치 모델에서

내가 좋아하는 뭔가를 시도했다 "location.start_date이 course.format == 'DVD는'하는 경우에만 공백 허용": 내가 사용하는 그런

validates_presence_of :start_date, 
         :message => "Start Date can't be blank", 
         :allow_blank => false, 
         :if => Proc.new { |course| self.course.format != 'DVD' } 

을 내가 좋아하는 뭔가를 갖고 싶어 그게, 내가 얻을 : 개인 메서드 '형식'nil : NilClass 호출

만약 내가 올바른 방향으로 가고 있는지 확실하지.

감사합니다.

답변

0

if에 전달 된 Proc 절은 매개 변수로 유효성 검사중인 현재 개체의 인스턴스를 차단합니다. 그래서, 당신이 가지고있는 것은 |course|입니다. 실제로는 |location|입니다. 다음과 같은 것을 시도해보고 원하는대로 작동하는지 확인하십시오.

validates_presence_of :start_date, 
         :message => "Start Date can't be blank", 
         :allow_blank => false, 
         :if => Proc.new { |location| location.course.format != 'DVD' } 
+0

@ 브랜 던 ... 그렇습니다. 나는 그것을 뒤로했다. 이제는 다른 문제에 대한 경계가 될 수 있으므로 유일한 문제는 새로운 코스를 만들 때 Nil이라는 Nil 클래스라는 private 메소드 '형식'을 얻게된다는 것입니다. 나는 이것이 아직 실제로 만들어지지 않았고 그 위치가 아직 연결될 것이 없기 때문에 이것이라고 믿습니다. – keldog

+0

proc을 수정하여'| location | ! location.course.nil? && location.course.format! = 'DVD'' –

관련 문제