2

我正在尝试测试与 RSpec 的一些关联,但我遇到了这些失败:

Category 
   Failure/Error: it {should belong_to :post}
   Expected Category to have a belongs_to association called post (Category does not have  a post_id foreign key.)
 # ./spec/models/category_spec.rb:7:in `block (2 levels) in <top (required)>'

Post 
 Failure/Error: it {should have_one (:category)}
   Expected Post to have a has_one association called category (Category does not have a post_id foreign key.)
 # ./spec/models/post_spec.rb:8:in `block (2 levels) in <top (required)>'

这是我的模型:

class Post < ActiveRecord::Base
  has_one :category
  validates_presence_of :author, :category, :post
end

class Category < ActiveRecord::Base
  belongs_to :post
  validates_presence_of :name
end

和我的测试:

require 'spec_helper'

describe Post do
  it {should validate_presence_of(:author)}
  it {should validate_presence_of(:post)}
  it {should validate_presence_of(:cathegory)}
  it {should have_one (:category)}  
end

describe Category do
  it {should validate_presence_of :name}
  it {should belong_to :post}
end

和我的计划

 ActiveRecord::Schema.define(:version => 20121118131441) do

   create_table "categories", :force => true do |t|
     t.string   "name"
     t.datetime "created_at", :null => false
     t.datetime "updated_at", :null => false
     t.integer  "post_id"
   end

   create_table "posts", :force => true do |t|
     t.string   "author"
     t.string   "cathegory"
     t.text     "post"
     t.datetime "created_at",  :null => false
     t.datetime "updated_at",  :null => false
     t.integer  "category_id"
   end

end

有人知道发生了什么吗?

4

1 回答 1

5

在没有看到您的架构的情况下,您的数据库表似乎缺少外键列。创建添加以下内容的迁移应该可以修复它:

add_column :categories, :post_id
add_column :posts, :category_id

更新

正如我在下面的评论中所说,还要确保您运行rake db:test:prepare以确保您的测试数据库具有最新的模式。

于 2012-11-18T13:06:53.507 回答