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

Était-ce utile?

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é

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top