代码之家  ›  专栏  ›  技术社区  ›  Trip

工厂/rspec2场景中未定义的方法“each”

  •  5
  • Trip  · 技术社区  · 14 年前

    我想制造一个与投票有关的帖子。以便投票后将生成与其关联的投票。

    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)[通用达尔文10.0]

    轨道3.0.0

    2 回复  |  直到 14 年前
        1
  •  12
  •   Jamie Wong    14 年前
    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)]
    

    前者不是数组,因此不起作用,后者是数组。

        2
  •  5
  •   edzhelyov    13 年前

    如果要分配需要数组而不是单个值的多个关联,则应使用长格式:

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

    并封装与[]关联的创建,以确保返回数组