2017-04-14 1 views
0

Company 모델은 has_manyUsers입니다. belongs_toCompany입니다. 또한 피하고 싶은 외부 서비스를 호출하는 Company 모델의 콜백이 있습니다. FactoryGirl을 linter로 설정하려고 시도하지만 오류가 계속 발생합니다.중첩 된 특성 및 레일스를 가진 공장 소녀 오류 5

다음은 컨트롤러가 보이는 방법은 다음과 같습니다

class CompanyController < ApplicationController 
    ... 

    def new 
    @company = Company.new 
    @user = @company.users.build 
    end 

    def create 
    @company = Company.new(company_params) 
    @user = @company.users.first 
    ... 
    end 

    ... 
end 

컨트롤러는 로컬 호스트와 생산에 잘 작동, 그래서 문제는 코드 기능과 필요가 없습니다 - 그것은 내가 데 시험 문제입니다.

나는이 라인을 따라 공장을 만들려고하고는 :

FactoryGirl.define do 
    factory :company do 
    name Faker::Company.name 
    association :user, strategy: :build 
    before(:create) do |company| 
     company.class.skip_callback(:create, :before, :my_callback) 
    end 
    end 

    factory :user do 
    email Faker::Internet.email 
    password "password" 
    password_confirmation "password 
    end 
end 

문제는 내가 이후 undefined method user=belongs_to 이후 사용자에 대한 company must exist이 필요 없다는 오류 및 회사에 대한 오류가 있다는 것입니다 여러 사용자를 만들려고 노력 중입니다. 또한 콜백을 건너 뛰지 않는 많은 다른 변형을 시도했습니다 (예 : 사용자 팩터에서 회사 생성).

이 유형의 컨트롤러 설정과 호환되는 방법으로 팩토리를 작성하는 방법을 알고 있거나 중첩 된 속성없이 컨트롤러를 작성해야하는 다른 방법이 있는지 알고 싶습니다.

미리 도움을 청하십시오!

답변

0

나는 덧글을 추가하려고했으나 그것에 대한 충분한 평판이 없습니다.

모델과 db 테이블을 표시하지 않았지만 users 테이블의 테이블이 company_id이고 Company 모델의 테이블에 has_many :users 테이블이 있다고 가정합니다.

그건 내가이 상황에서 공장 소녀을 사용하는 방법은 다음과 같습니다

사용자 공장 :

factory :user do 
    email Faker::Internet.email 
    password "password" 
    password_confirmation "password" 
    company 
    end 

회사 공장 : 그럼 당신은 여러 사용자를 만들 테스트

factory :company do 
    name Faker::Company.name 
end 

, 권리?

company = create(:company) 
number_of_users = 5 
create_list(:user, number_of_users, company: company) 

이렇게하면 모든 사용자가 동일한 회사에 연결됩니다.

관련 문제