2014-11-27 2 views
0

저는 프로그래밍에 익숙하지 않으며 약 10 주 동안 Ruby on Rails를 배우고 있습니다. 내가 모델이 사용자에 대한 유효성을 검사하는 알고, 이제NoMethodError : 내 메서드 중 하나에서 RSpec 테스트를 실행할 때 정의되지 않은 메서드 'user'

class Item < ActiveRecord::Base 
    belongs_to :list 

    default_scope { where("items.created_at > 7.days.ago") } 

    validates :body, length: { minimum: 5 }, presence: true 
    validates :user, presence: true 
end 

:하지만, 나는 아래 모델에 RSpec에 테스트를 실행하면

, 나는 모델을 여기

NoMethodError: 
    undefined method `user' for #<Item:0xab6623c> 

입니다 점점 ​​계속 나는 Factory Girl과 함께 사용자를 만들었고 내 사양에 포함시켰다.

FactoryGirl.define do 
    factory :item do 
    body 'item body' 
    list 
    user 
    end 
end 

사용자 공장 : 여기

FactoryGirl.define do 
    factory :user do 
    name "John Fahey" 
    sequence(:email, 100) { |n| "person#{n}@example.com" } 
    password "helloworld" 
    password_confirmation "helloworld" 
    confirmed_at Time.now 
    end 
end 

... 그리고 내 사양이다 : 나는 공장 소녀를 읽을

require 'rails_helper' 

describe Item do 
    describe "validations" do 
    describe "length validation" do 

     before do 
     user = create(:user) 
     item = create(:item, user: user) 
     end 

     it "only allows items with 5 or more characters." do 
     i = item.body(length: 4) 
     expect(i.valid?).to eq(false) 

     i = item.body(length: 6) 
     expect(i.valid?).to eq(true) 
    end 
    end 
    end 
end 

는 "시작"가이드 여기 내 공장입니다 사용자 및 항목을 만들 때 내 구문이 정상인지 확인하려면 테스트가 사용자를 인식하지 못하는 이유를 모르겠습니다. 내가 여기서 뭐하고 있니?

+3

'아이템'모델에서'belongs_to : user'가 누락 된 것 같아요. –

+0

class 사용자 EricLowber

+0

"많이 통과했습니다"를 올바르게 사용하지 않았을 수 있습니다. 사용자 모델에서 나는 사용자가 목록 모델을 통해 많은 항목을 가지고 있다고 언급했다. class User EricLowber

답변

1

user과 같은 게터 메소드가 Item에 존재하도록 모델에 연관성을 추가해야하는 것처럼 보입니다.

따라서 has_one :userItem에 추가하고 필요에 따라 has_many :itemsUser에 추가하려고합니다.

희망이 있습니다.