2013-10-28 30 views
2

我有一项属于许多活动的活动。每当我用rSpec测试我的工厂时,我都会遇到错误。与FactoryGirl的关联引发未定义的方法

测试是:

it "has valid factory" do 
    expect(FactoryGirl.build(:activity)).to be_valid 
end 

而鉴于错误是:

1) Activity has valid factory 
    Failure/Error: expect(FactoryGirl.build(:activity)).to be_valid 
    NoMethodError: 
     undefined method `client=' for #<Activity:0x6cbb800> 
    # C:in `object' 
    # ./spec/models/activity_spec.rb:5:in `block (2 levels) in <top (required)> 

它一直是这样,因为我已经添加association :client活动厂

FactoryGirl.define do 
    factory :activity do 
     title "Activity" 
     start_date {Date.parse('2013-05-13 12:00:00')} 
     end_date {Date.parse('2013-05-13 12:15:00')} 
     pictogram_id "1" 
     association :client 
    end 
end 

客户端本身也通过了所有测试。与同厂:(clients.rb

FactoryGirl.define do 
    factory :client do 
     name "Client name" 
     background "#FFFFFF" 
     birthdate {15.years.ago} 
    end 
end 

因为它不是一个测试准备DB /克隆问题我更新后与我schema.rb的相关部分

create_table "activities", force: true do |t| 
    t.string "title" 
    t.datetime "start_date" 
    t.datetime "end_date" 
    t.integer "pictogram_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    add_index "activities", ["pictogram_id"], name: "index_activities_on_pictogram_id" 

    create_table "activities_clients", id: false, force: true do |t| 
    t.integer "activity_id" 
    t.integer "client_id" 
    end 

    add_index "activities_clients", ["activity_id"], name: "index_activities_clients_on_activity_id" 
    add_index "activities_clients", ["client_id"], name: "index_activities_clients_on_client_id" 

    create_table "clients", force: true do |t| 
    t.string "name" 
    t.string "avatar" 
    t.date  "birthdate" 
    t.string "background" 
    t.integer "group_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

任何想法为什么协会不能呃..缔结?

回答

2

如果您的数据库模式更改尚未在测试数据库上运行,通常会发生这种情况。确保在最近的迁移后运行“rake db:test:prepare”。

+0

这也是我的想法。克隆也没有效果。我用我的schema.rb编辑我的文章 – CaptainCarl

+0

它看起来像你越来越has_many和has_and_belongs_to_many困惑。你的数据库是为后者设置的,但你试图将它用作has_many关系,其中一个活动只能属于一个客户端。这是什么? –

+0

Ehm。没有;编辑这个评论:它应该是我的数据库中的has_many。我如何解决这个问题? > _ < – CaptainCarl

相关问题