0

我正在运行 rails 3.0、rspec 2.0 和 factory_girl。这是我正在使用的简化方案:用户一次只能订阅一个计划

# user.rb
class User < ActiveRecord::Base
  has_one :plan
  attr_accessible :login, :plan_id

end

# plan.rb
class Profile < ActiveRecord::Base
 attr_accessible :plan
end

# user_factory.rb
Factory.define :user do |u|
  u.login "test"
  u.association :plan
end

#plan_factory.rb
Factory.define :plan do |p|
   p.name "plan1"
end

当我运行 rspec spec/models/user_spec.rb 我得到这个错误:

失败/错误:user = Factory(:user) SQLite3::ConstraintException: users.plan_id 可能不是 NULL

#spec/models/user_spec.rb
require File.dirname(__FILE__) + '/../spec_helper'

describe User do
  it "should be valid" do
    user = Factory(:user)
    #User.new.should be_valid
    user.should be_valid
  end
end

我做错了什么?我被这个非常简单的场景困住了,这非常令人沮丧。那时BDD让我慢下来!

4

2 回答 2

0

您似乎has_one错误地实现了关联。关系中的外键has_one -- belongs_to应该放在与带有belongs_to指令的模型对应的表中。检查db/schema.rb——我想你会发现它plan_idusers表中定义。如果您希望User模型有一个Plan,您需要从 中删除plan_idusers添加user_idplans

如果您更愿意将其设置为Planhas one User,请保持模式不变并has_one :user放入Planbelongs_to :planUser

于 2010-10-14T05:30:56.170 回答
0

用户订阅一个计划。所以一个用户有一个计划,一个计划与许多用户相关。所以我认为我做对了。错误出现在用户工厂。更换

u.association :plan

经过

u.association :plan, :factory => :plan

解决了这个问题。

问题解决了!

于 2010-11-02T00:46:25.167 回答