2010-09-21 15 views
5

J'essaye de créer un article associé à un vote. Alors que Post.votes générerait le Vote qui lui est associé.Méthode non définie `each 'dans un scénario factory_girl/rspec2

Factory.define :voted_post, :parent => :post, :class => Post do |p| 
    p.association :votes, :factory => :vote 
end 

Et mon rspec2 est relativement simple:

describe "vote scores" do 
    it "should show me the total vote score" do 
    @post = Factory(:voted_post) 
    @post.vote_score.should == 1 
    end 
end 

Alors, pourquoi serait-il revenir cette erreur:

Failures: 
    1) Post vote scores should show me the total vote score 
    Failure/Error: @post = Factory(:voted_post) 
    undefined method `each' for #<Vote:0x105819948> 

rubis 1.8.7 (2009-06-12 patchlevel 174) [ universal-darwin10.0]

Rails 3.0.0

Répondre

8
Factory.define :voted_post, :parent => :post, :class => Post do |p| 
    p.association :votes, :factory => :vote 
end 

Est-ce la même chose que d'essayer d'aller

some_voted_post.votes = Factory(:vote) 

Fondamentalement, vous essayez d'assigner un seul vote comme un tableau.

EDIT

Vous pouvez avoir un tableau contenant un seul vote, mais vous ne pouvez pas avoir un seul vote.

Il est la différence entre:

some_voted_post.votes = Factory(:vote) 

et

some_voted_post.votes = [Factory(:vote)] 

L'ancien est pas un tableau, et donc ne fonctionne pas, ce dernier est un tableau.

+1

Just do 'p.association: vote' (non pluriel) –

+0

Pourquoi un seul vote ne fonctionnerait-il pas en tant que tableau? – Trip

+1

@Trip Voir édition. –

4

Si vous souhaitez attribuer une association has_many qui attend ensemble et non une seule valeur, vous devez utiliser la forme longue:

Factory.define :voted_post, :parent => :post, :class => Post do |p| 
    p.votes { |vote| [vote.association(:vote)] } 
end 

Et résumer la création de l'association avec [] pour assurer ce tableau serait retourné