2010-07-21 5 views
2

사용자 별 유효성 검사를 만들고 싶습니다.ActiveRecord : 사용자 별 유효성 검사

사용자에게는 특정 수량의 일련 화 된 해시 인 "rule_values"라는 열이 있습니다.

class Foo < ActiveRecord::Base 
    belongs_to :user 

    n = self.user.rule_values[:max_awesome_rating] #this line is giving me trouble! 
    validates_presence_of :awesome_rating, :in => 1..n 
end 

것 같다 그 자체가 (내가 정의되지 않은 방법 오류를 받고 있어요 이유입니다) 푸를 의미하지 푸의 인스턴스 : 별도의 모델에서

는, 푸, 나는 검증 있습니다. Foo 모델 내에서 User 인스턴스에 어떻게 액세스 할 수 있습니까?

답변

1

Foo에서 사용자 정의 유효성 검사를 만드는 것은 어떻습니까?

class Foo < ActiveRecord::Base 

    validate do |foo| 
    n = foo.user.rule_values[:max_awesome_rating] 
    unless (1..n).include? foo.awesome_rating 
     foo.errors.add :awesome_rating, "must be present and be between 1 and #{n}" 
    end 
    end 

end 

인스턴스에 액세스하고 사용자 협회

+0

블록 사용시 보너스 포인트. 좋은 일, 모두! 감사! – user94154

1

레일을이 방법 (validate 사용) 사용자 정의 유효성 검사를 지원합니다. 작동 방식에 대한 아이디어는 다음과 같습니다.

class Foo < ActiveRecord::Base 
    belongs_to :user 
    validate :awesome_rating_is_in_range 

    def awesome_rating_is_in_range 
    errors.add(:awesome_rating, 'not in range') unless (1..user.rule_values[:max_awesome_rating]).include? awesome_rating 
    end 
end 
관련 문제