5

我正在尝试制作与投票相关的帖子。这样 Post.votes 将生成与之关联的投票。

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>

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

导轨 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 回答