所以我试图弄清楚如何测试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
答案 0 :(得分:1)
如果查看db / schema.rb,您会注意到tokens表中没有名为user_id的列。但是在你的灯具中,你引用user_one就像它应该一样。如果将rails generator命令修改为rails g model token code:string user_id:int
,那么它应该可以正常工作。
答案 1 :(得分:1)
对于User
和Token
之间的 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
表中的更改。