2011-09-06 10 views
0

내 모델 (제품)에서 각 제품에 유효한 소유자 (사용자의 login_id)가 있어야한다는 확인이 있습니다.모델을 초기화하기 전에 사용자를 생성하려면 어떻게해야합니까?

validates_presence_of :owner 
validates_inclusion_of :owner, :in => User.first.login_id, :message => "%{value} is not a valid owner name" 

팩토리 소녀

을 사용하여 제품 모의 개체를 만들려고합니다. 신제품 사용자의 login_id가 필요합니다. 그래서 내가 사용자를 만들 수 있습니다.

까지 모든 것이 정상이지만 해당 사용자의 login_id 제품을 사용하여 제품을 만들려고 할 때 유효성 검사 메시지 ("User1은 유효한 소유자 이름이 아닙니다")를 만들고 표시하지 않습니다.

더 깊게 파고 나면

  1. 문제는 내 모델의 유효성 검사에서 발생합니다.
  2. factory.rb, 에서 모의 ​​사용자를 만들기 전에 초기화하는 유효성 검사 (validates_inclusion_of : owner, in :> User.first.login_id)가 있습니다 (데이터베이스에 사용자가 생성되지 않아 사용자가 생성 될 때까지) factory.rd를 실행할 때 모델을 초기화 한 후)

제 질문은 입니다. 1. 모델 초기화 전에 어떻게 사용자를 생성 할 수 있습니까?

답변

0

나는 다음과 같이이 문제를 해결 : 나는 정의의 검증 방법을 작성하여 '레일 검증'을 대체 한 내 모델에서

. 이 사용자 지정 유효성 검사 메서드는 'Product'를 만들 때 호출됩니다.

validates_presence_of :owner 
validate :owner_should_be_registered_user 

def owner_should_be_registered_user 
    if !User.all_user.include? owner and !owner.nil? 
     errors.add(:owner, "is not a valid user") 
    end 
    end 
0

사용자 개체를 만든 다음 해당 개체를 제품 공장으로 전달할 수 있습니까? 유효한 사용자를 생성 한 다음 소유자 연결을 통해 제공하고 제품을 유효하게해야합니다.

user = Factory(:user, :name => "User1") 
product = Factory(:product, :owner => user) 

이 사용자는 분명히 최초 사용자 여야합니다. 따라서 기존 사용자 개체가있는 경우 첫 번째 개체를 만들기 전에 모든 사용자를 지울 수 있습니다.

User.delete_all 
+0

이 사용자는 첫 번째 사용자 일 필요는 없으며 등록 된 사용자 일 수 있습니다. 내가 당신에 따라 다음과 같은 오류가 발생했습니다 : ArgumentError : 등록되지 않음 : 제품 /usr/local/lib/ruby/gems/1.9.1/gems/factory_girl-2.0.4/lib/factory_girl/registry.rb:15 :'find '에서 /usr/local/lib/gems/1.9.1/gems/factory_girl-2.0.4/lib/factory_girl.rb:42:in' factory_by_name' /usr/local/lib/ruby /gems/1.9.1/gems/factory_girl-2.0.4/lib/factory_girl/syntax/vintage.rb:53:in'default_strategy ' /usr/local/lib/ruby/gems/1.9.1/gems/factory_girl -2.0.4/lib/factory_girl/구문/vintage.rb : 146 :'공장 ' – suvankar

관련 문제