2010-09-21 5 views
5

मैं एक वोट के साथ जुड़े एक पोस्ट फैक्ट्री की कोशिश कर रहा हूं। ताकि पोस्ट.वॉट्स वो वोट उत्पन्न कर सकें जो इसके साथ जुड़े हुए हैं।किसी कारखाने_girl/rspec2 परिदृश्य में अपरिभाषित विधि 'प्रत्येक'

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 Patchlevel 174) [ सार्वभौमिक-डार्विन 10.0]

रेल 3.0.0

उत्तर

8
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)] 

पूर्व है नहीं एक सरणी काम नहीं करता है, बाद एक सरणी है, और इसलिए:

यह बीच का अंतर है।

+1

बस 'पी। एसोसिएशन: वोट' (गैर-बहुवचन) –

+0

एक वोट कैसे एक सरणी के रूप में काम नहीं करेगा? – Trip

+1

@Trip संपादित देखें। –

4

आप has_many संघ जो सरणी और एक भी मूल्य की उम्मीद है प्रदान करना चाहते हैं, तो आप लंबे समय से फार्म का उपयोग करना चाहिए:

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

और उस सरणी सुनिश्चित करने के लिए किया जाएगा [] के सहयोग के निर्माण को संपुटित

संबंधित मुद्दे