Rails错误ActiveRecord :: AssociationTypeMismatch:用户(#65709220)预期,得到字符串(#19934580)

时间:2013-09-06 05:00:30

标签: ruby-on-rails rspec rspec2

嗨,你在rails中使用rspec,并创建一个有效的用户,如下所示

it "should create a valid user" do
    @user = User.find_or_create_machine_user("test@dllo.no","test_first",     "test_last").should be_an_instance_of User
  end

此测试通过并且工作正常,但是当我将此部分包含在内时出现错误

 @batch = FactoryGirl.create(:batch, :file_name => "test_file",
                                  :created_by=> @user)

并说ActiveRecord::AssociationTypeMismatch: User(#65709220) expected, got String(#19934580)。我尝试使用created_by_id = @ user.id.to_int这也失败了。

模式

class Batch < ActiveRecord::Base
  belongs_to :created_by, :class_name => "User", :foreign_key => :created_by
  attr_accessible :created_by, :file_name

任何人都可以告诉我们如何克服这个问题吗? created_by接受用户

1 个答案:

答案 0 :(得分:1)

您的规范是将断言的值分配给@user。因此,@ user不是用户。此外,find_or_create_machine_user看起来很奇怪。您应该使用find_or_create_by或更好的变体为User编写工厂。传递这个User类的实际实例应该可以解决问题。

it "should create a valid user" do
  @user = User.find_or_create_machine_user("test@dllo.no","test_first","test_last")
  @user.should be_an_instance_of User
end