Procédé indéfini `chaque » dans un scénario de factory_girl / rspec2
-
04-10-2019 - |
Question
Je suis en train de l'usine un message associé à un vote. Alors que Post.votes générerait le vote de qui sont associés.
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) [-darwin10.0 universel]
Rails 3.0.0
La solution
Factory.define :voted_post, :parent => :post, :class => Post do |p|
p.association :votes, :factory => :vote
end
est la même chose que d'essayer d'aller
some_voted_post.votes = Factory(:vote)
En gros vous tentez d'attribuer un 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.
Autres conseils
Si vous voulez assign 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 la création de résumer l'association avec [] pour faire en sorte que tableau serait retourné