2014-04-22 2 views
0

그래서 has_many 관계를 테스트하는 방법을 알아 내려고했지만 약간의 어려움이 있습니다.레일 테스팅 테이블을 찾지 못했습니다

다음은 다음은 dB/schema.rb를 보는 경우에, 더 열 이름 USER_ID가없는 것을 알 수

$ rails new lab 
$ cd lab 
$ rails g model user name # has_many tokens 
$ rails g model token code # belongs_to user 
$ rake db:migrate 

# tokens.yml 
one: 
    code: 0A 
    user: user_one 
two: 
    code: 0B 
    user: user_one 

# users.yml 
    user_one: 
    name: John 

# user_test.rb 
require 'test_helper' 
class UserTest < ActiveSupport::TestCase 
    test "has tokens" do 
    user = users(:user_one) 
    assert_not_equal [], user.tokens 
    end 
end 

답변

1

, tokens 표 foreign_key에 users 테이블을 가져야한다. 당신은 그것을 잊어 버렸습니다. tokens 테이블 user_id라는 이름의 외부 키를 가지고 있지 않기 때문에 당신이 user.tokens하지만를 호출하는 테스트의 경우 , 당신은 추가 마이그레이션을 생성이 문제를 해결하려면

table tokens has no column named user_id

,

같은 오류가

rails g migration AddUserIdToTokens user:references 

Afte : 다음 명령을 실행하여 tokens 테이블의 외래 키와 컬럼 user_idrake db:migrate을 실행하면 tokens 테이블의 변경 사항이 마이그레이션됩니다.

1

내가 오류를 재현하는 방법은 오류

table tokens has no column named user_id 

입니다 토큰 테이블에. 그러나 당신의 비품에서, 당신은 user_one을 그것이 해야하는 것처럼 참조합니다. 레일 제너레이터 명령을 rails g model token code:string user_id:int으로 수정하면 제대로 작동합니다. UserToken 사이 1-M의 관계는 들어