未找到Rails测试表

时间:2014-04-22 18:12:26

标签: ruby-on-rails testing has-many

所以我试图弄清楚如何测试has_many关系,但我遇到了一些困难。

这是错误

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

2 个答案:

答案 0 :(得分:1)

如果查看db / schema.rb,您会注意到tokens表中没有名为user_id的列。但是在你的灯具中,你引用user_one就像它应该一样。如果将rails generator命令修改为rails g model token code:string user_id:int,那么它应该可以正常工作。

答案 1 :(得分:1)

对于UserToken之间的 1-M关系tokens表必须具有foreign_key到users表。你忘了创造它。 在您的测试用例中,您正在调用user.tokens,但由于tokens表没有名为user_id的外键,您会收到错误

table tokens has no column named user_id

要解决此问题,

通过运行以下命令,生成迁移以将列user_id添加为tokens表中的外键:

rails g migration AddUserIdToTokens user:references

在此次运行rake db:migrate之后,迁移tokens表中的更改。