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