RSpec sequence error: undefined method `primary_key' for String:Class

RSpec sequence error: undefined method `primary_key' for String:Class

这是我的spec/factories/nodes.rb

FactoryGirl.define do
  factory :node do
    sequence(:name) { |n| "Node#{n}" }
    family_tree nil
    user nil
    media ""
  end
end

这是我的node_spec.rb

require 'rails_helper'

describe Node do
  it "is valid with a name" do
    # node = Node.new(generate(:name))
    expect(build(:node)).to be_valid
  end
end

这是我收到的错误:

Failures:

  1) Node is valid with a name
     Failure/Error: expect(build(:node)).to be_valid
     NoMethodError:
       undefined method `primary_key' for String:Class

这是我的 Node.rb 模型的架构:

# == Schema Information
#
# Table name: nodes
#
#  id             :integer          not null, primary key
#  name           :string(255)
#  family_tree_id :integer
#  user_id        :integer
#  media_id       :integer
#  media_type     :string(255)
#  created_at     :datetime
#  updated_at     :datetime
#  circa          :datetime
#  is_comment     :boolean

  validates :name, presence: true

想法?

编辑 1

所以我刚刚删除了整个文件,并用这个替换它,现在它可以工作了:

FactoryGirl.define do
  factory :node do
    sequence(:name) { |n| "Node#{n}"  }
  end
end

虽然我不知道是什么起作用了。

问题是之前的 FactoryGirl 定义将空字符串分配给 Nodemedia 字段。您尚未分享您对 Node class 的定义,但大概 media 是一个 ActiveRecord 关联。这又需要从分配给 media 的任何对象中获取主键值,以便它可以设置记录中的 media_id 字段。