2017-04-14 12 views
0

Companyモデルhas_manyUsersbelongs_toCompanyがあります。また、私が避けたい外部サービスを呼び出すCompanyモデルのコールバックもあります。私はlinterでFactoryGirlを設定しようとしていますが、それはエラーを投げつけ続けます。ネストされた属性とレールを持つ工場ガールエラー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) 

こうすることで、作成したすべてのユーザーが同じ会社に関連付けられます。

関連する問題