5

投票に関連付けられた投稿をファクトリしようとしています。Post.votesがそれに関連付けられたVoteを生成するようにします。

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

そして私のrspec2は比較的簡単です:

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

では、なぜこのエラーが返されるのでしょうか。

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

ルビー1.8.7(2009-06-12パッチレベル174)[universal-darwin10.0]

Rails 3.0.0

4

2 に答える 2

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

行こうとするのと同じ

some_voted_post.votes = Factory(:vote)

基本的に、単一の投票を配列として割り当てようとしています。

編集

単一の投票を含む配列を持つことはできますが、単一の投票を持つことはできません。

それは次の違いです。

some_voted_post.votes = Factory(:vote)

some_voted_post.votes = [Factory(:vote)]

前者は配列ではないため機能しませんが、後者は配列です。

于 2010-09-21T02:55:55.990 に答える
5

単一の値ではなく配列を期待する has_many 関連付けを割り当てたい場合は、長い形式を使用する必要があります。

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

[] を使用して関連付けの作成をカプセル化し、配列が確実に返されるようにします。

于 2011-07-28T11:12:26.463 に答える