2011-12-27 2 views
0

これで、ユーザー、プロジェクト、およびそれらのプロジェクトを見る能力のために多対多の関連付けを設定しました。FactoryGirlは多数あります

#project.rb 
class Project < ActiveRecord::Base 
    has_many :watchings, :foreign_key => "watched_project_id" 
    has_many :watchers, :through => :watchings, :source => :user 
end 

#user.rb 
class User < ActiveRecord::Base 
    has_many :watchings 
    has_many :watched_projects, :through => :watchings 
end 

#watching.rb 
class Watching < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :watched_project, :class_name => 'Project' 
end 

は、機能的にはすべてがこれまでに取り組んでいる(私が今まで「Watchings」を作ってみた最高の名前ではなく、呼び出されます)。私はプロジェクトを見て、どれだけ多くのウォッチャーがプロジェクトを持っているかを調べることができます。しかし私のキュウリの機能は、ファクトリーガールをどのように協力させるかわからないので、間違いを続けています。

Factory.define :user do |user| 
    user.sequence(:email) {|n| "user#{n}@example.com"} 
    user.password "secret" 
    user.password_confirmation {|u| u.password } 
end 

Factory.define :project do |project| 
    project.name "Project" 
    project.description "Hello World" 
end 

Factory.define :watchings do |watching| 
    watching.association(:user) 
    watching.association(:watched_project) 
end 

そして、私のステップ定義:

Given /^a Project exists called "(.+)" with (\d+) watchers$/ do |project, watchers| 
    @project = Factory(:project) 
    watchers.to_i.times do |watcher| 
    watcher = Factory(:user) 
    watching = Factory(:watching) 
    watching.user = watcher 
    watching.watched_project = @project 
    end 
end 

ステップ定義を実行するたびに、それが出てパニックと

undefined method `watching_user_id=' for #<Watching:0x007ff7800c7978> (NoMethodError) 

を言う「私は、いくつかの異なるものを試してみたが、私はすることができますそれが実際にテストの関連付けを行う方法を見つけ出す。

+0

実際に私が気づいていなかった自動生成された工場からのエラーメッセージが表示されていました。 – DVG

答えて

2

あなたは乱雑な命名法を使用します。あなたはファクトリの定義のために古いFactoryGirl構文を使用している

FactoryGirl.define do 

    factory :project do 
    name "Project" 
    description "Hello World" 
    end 

    factory :user do 
    sequence(:email) { |n| "user#{n}@example.com" } 
    sequence(:password) { |n| "password#{n}" } 
    end 

    factory :watching do 
    user 
    project 
    end   
end 
+0

ええ、私は本当に "Watchings"という名前を誇りに思っていませんが、私は醜いではない別の名前を考えることができませんでした。私はこれを撃つ – DVG

3

注:また、また、ここでは動作するはずファクトリー・ガールの一例です。

は、以下のことを試してみてください。

Factory.define :watchings do |watching| 
    watching.association(:user) 
    watching.association(:watched_project), :factory => :project 
end 

これはwatched_projectが実際にタイプprojectであるウォッチング工場を教えてください。ずっときれいに見える

FactoryGirl.define do 
    factory :user do 
    sequence(:email) {|n| "user#{n}@example.com"} 
    password "secret" 
    password_confirmation {|u| u.password } 
    end 

    factory :project do 
    name "Project" 
    description "Hello World" 
    end 

    factory :watchings do 
    user 
    association :watched_project, :factory => :project 
    end 
end 

:あなたの完全なファクトリの定義は次のようになり、新たな構文で

関連する問題