2014-04-22 95 views
0

所以我想弄清楚如何測試has_many關係,但我遇到了一些困難。Rails Testing Table not found

這裏的錯誤

table tokens has no column named 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

對於UserToken之間1-M關係tokens表必須具有foreign_key到users表。你忘了創建它。 在您所呼叫user.tokens但你的測試用例作爲tokens表沒有名爲user_id外鍵,你的錯誤作爲

table tokens has no column named user_id

要解決這個問題,

生成遷移到加

rails g migration AddUserIdToTokens user:references 

AFTE:通過運行以下命令列user_id爲外鍵tokens表r運行rake db:migrate以遷移tokens表中的更改。

1

如果你看看你的DB/schema.rb,你會發現,沒有指定的列USER_ID在令牌表中。但在你的燈具中,你應該像引用user_one一樣。如果你修改你的rails generator命令到rails g model token code:string user_id:int那麼它應該可以工作。