ruby-on-rails - 奇怪的 ActiveRecord::AssociationTypeMismatch

标签 ruby-on-rails ruby

我在运行规范时遇到一个非常奇怪的错误:

Failure/Error: entity = Factory.create(:entity, :name => "Test Entity", :creator => user)
 ActiveRecord::AssociationTypeMismatch:
   ::User(#97318850) expected, got User(#92770800)

这是导致上述错误的代码。工厂是一个factory_girl工厂。

  user = Factory(:user, :username => "kai", :email => "xxx@yyy.com", :password => "testing")
  entity = Factory.create(:entity, :name => "Test Entity", :creator => user)

当我使用 :creator => User.first 时,一切都按预期进行。我打印了 User.firstuser,但看不出有什么区别。

有什么建议吗?

更新

我在运行这个简单的请求规范时也遇到了这个错误

describe "Entities" do
  it "should succeed" do
    entity = Factory.create(:entity, :name => "Test Entity 1")
    visit root_path
  end

  it "should also succeed" do
    entity = Factory.create(:entity, :name => "Test Entity 2")
    property = Factory.create(:property, :entity => entity)
  end
end

这次我得到

Failure/Error: property = Factory.create(:property, :entity => entity)
 ActiveRecord::AssociationTypeMismatch:
   Entity(#103620190) expected, got Entity(#96047070)

当我删除 visit root_path 时,一切正常(在单独运行每个规范时也是如此)。这似乎是请求规范的问题。其他规范(型号、 Controller )似乎运行良好。我使用 Capybara 1.0.0.beta1 和 RSpec 2.5。

类名后面的这个数字是什么意思?

最佳答案

这是加载两个不同版本的模型时发生的错误。我曾经在旧版本的 Rails 3 中点击它,因为开发环境的模型重新加载器有点小故障。类名后面的数字表示该类的不同版本。

按理说,这种错误可能会出现在开发模式下,但它不应该出现在测试模式下,因为默认情况下,类会被缓存。查看 config/environments/test.rb 文件以确保 cache_classes 设置为 true。

还要检查您使用的是不是最新版本的 Rails 3.0.7。这可能是一个已修复的错误。当我们这样做时,请检查您是否使用 factory_girl 1.3.3。当完全正确地使用 API 时(我认为您正在这样做),剩下的唯一可能性就是配置错误或其他人代码中的错误。

关于ruby-on-rails - 奇怪的 ActiveRecord::AssociationTypeMismatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5954690/

相关文章:

ruby-on-rails - rails : long delays AFTER webrick renders page before browser displays page (mac development machine)

ruby-on-rails - RSpec 助手规范模拟 ActiveRecord

ruby-on-rails - Rails created_at 查找条件

ruby - 如何捕获 rspec 示例、通过、失败计数到变量并返回到控制台?

ruby-on-rails - 如何同时查看电子邮件的纯文本和 html 版本?

ruby - 如何对 Ruby 的 Postgres 驱动程序和 DBI 进行故障排除?

sql - ActiveRelation 准备好迎接黄金时段了吗?

mysql - 无法批量分配 protected 属性 : time_zone

ruby - VIM Ruby Regex 语法用引号高亮显示

Ruby strftime : Day without leading zero, %e 不工作