Ruby on rails FactoryGirl:ActiveRecord::AssociationTypeMismatch:用户应为,已为#<;类别:0x007>;

Ruby on rails FactoryGirl:ActiveRecord::AssociationTypeMismatch:用户应为,已为#<;类别:0x007>;,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,我有一个简单的用户模型,有许多:照片关联。当我尝试FactoryGirl.create(:user)时,我得到以下错误。有什么想法吗 # user.rb has_many :photos, dependent: :destroy # photo.rb belongs_to :user FactoryGirl.define do factory :user do email 'john@site.com' after_build do |user| user.

我有一个简单的
用户
模型,有许多
:照片
关联。当我尝试
FactoryGirl.create(:user)
时,我得到以下错误。有什么想法吗

# user.rb
has_many :photos, dependent: :destroy

# photo.rb
belongs_to :user


FactoryGirl.define do
  factory :user do
    email 'john@site.com'
    after_build do |user|
      user.photos << FactoryGirl.build(:photo, user: user)
    end
  end

  factory :photo do
    photo File.new(File.join(::Rails.root.to_s, "/factories/images", "avatar1.jpg"), 'rb')
  end
#user.rb
有很多:照片,相依::销毁
#photo.rb
属于:用户
工厂女孩
工厂:用户做什么
电子邮件'john@site.com'
构建完成后|用户|
user.photos b=FactoryGirl.create(:user)
ActiveRecord::AssociationTypeMismatch:用户(#70183166983920)应为,已为(#70183166186140)
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/activerecord-3.2.8/lib/active\u-record/associations/association.rb:204:in'raise\u on_-type\u-mismatch'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/activerecord-3.2.8/lib/active\u record/associations/belies\u to\u association.rb:6:in'replace'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/activerecord-3.2.8/lib/active_-record/associations/singular_-association.rb:17:in'writer'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/activerecord-3.2.8/lib/active\u record/associations/builder/association.rb:51:在“定义写入程序中的块”中
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/attribute_assigner.rb:16:在“对象中的块(2层)”中
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/attribute_assigner.rb:15:in'each'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/attribute_assigner.rb:15:in'block in object'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/attribute_assigner.rb:14:in'tap'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/attribute_assigner.rb:14:in'object'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/evaluation.rb:12:in'object'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/strategy/build.rb:9:in'result'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/factory.rb:42:in'run'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/factory_runner.rb:23:in'block in run'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/activesupport-3.2.8/lib/active_-support/notifications.rb:125:in'instrument'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/factory_runner.rb:22:in'run'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory\u girl-4.1.0/lib/factory\u girl/strategy\u syntax\u method\u register.rb:19:in“定义中的块\u单数\u策略\u method”
... 8级。。。
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/attribute_assigner.rb:15:in'block in object'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/attribute_assigner.rb:14:in'tap'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/attribute_assigner.rb:14:in'object'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/evaluation.rb:12:in'object'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/strategy/create.rb:9:in'result'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/factory.rb:42:in'run'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/factory_runner.rb:23:in'block in run'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/activesupport-3.2.8/lib/active_-support/notifications.rb:125:in'instrument'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory_girl-4.1.0/lib/factory_girl/factory_runner.rb:22:in'run'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/factory\u girl-4.1.0/lib/factory\u girl/strategy\u syntax\u method\u register.rb:19:in“定义中的块\u单数\u策略\u method”
起始(irb):15
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in'start'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in'start'
来自/Users/user/.rvm/gems/ruby-1.9.2-p290@site/gems/railties-3.2.8/lib/rails/commands.rb:41:in`'
来自脚本/rails:6:in'require'
来自脚本/rails:6:in`'ruby-1.9.2-p290:016>#

已解决。我应该在(:create)之后使用较新的
,而不是在构建之后使用较旧的

我遇到了一个类似的问题,下面是我用来解决这个问题的代码块:

after(:create) do |user|
  user.photos << FactoryGirl.create :photo, user: user
end
(:create)do| user之后的
|

user.photos我在验证多个关联是否至少有一个关联模型时遇到类似问题:

    class Classroom < ActiveRecord::Base
      # Relationships
      belongs_to :course
      has_many :weekdays

      # Validations
      validate :has_weekdays

      def has_weekdays
        errors.add(:base, 'it is invalid without at least one weekday') if   self.weekdays.blank?
      end

    end
课堂
因此,为了使工厂有效,这里是我的代码

FactoryGirl.define do
  factory :classroom do
    course    

    after (:build) do |classroom|
      classroom.weekdays << FactoryGirl.create(:weekdays, classroom: classroom)
    end 
  end
end
FactoryGirl.define do
工厂:教室吗
课程
在(:build)do |教室之后|

当前版本使用不同的格式定义回调,您应该使用after
create
解决,而不是after
build
。如果您发现错误,我应该在(:create)
之后使用较新的
,而不是在构建之后使用较旧的
@Martin,请回答您自己的问题。
FactoryGirl.define do
  factory :classroom do
    course    

    after (:build) do |classroom|
      classroom.weekdays << FactoryGirl.create(:weekdays, classroom: classroom)
    end 
  end
end