0

我有以下表格

用户。

姓名 电子邮件 .. password_digest

公司。

姓名 地址 ...contact_person_id

所以我的公司有一个contact_person,它带有一个user_id,因此是一个外键。

我尝试了以下方法。

class Company < ActiveRecord::Base
  has_one(:user, foreign_key: 'contact_person_id')
end

class User < ActiveRecord::Base
  belongs_to(:company, :class_name => "Company", :foreign_key => 'contact_person_id')
end

但是当我尝试运行我的 (respond_to) rspecs 我得到

 Failure/Error: before { @company = FactoryGirl.create(:company) }
 ActiveModel::MissingAttributeError: can't write unknown attribute `contact_person_id'

我的工厂

FactoryGirl.define do
  factory :company do
    name "Starup Company"
    address "Test street 37"
    zip 2200
    website "http://example.com"
    industry "Construction"
    contact_person user
  end
end

我究竟做错了什么?我将如何用公司对象指向用户?

company.contact_person
4

1 回答 1

0

2个问题-您已经逆转belongs_to并且has_one正在调用contact_person公司的方法,但是您将关系定义为user

如果您想contact_person在公司上使用该方法,请尝试以下操作:

class Company < ActiveRecord::Base
  belongs_to(:contact_person, class_name: 'User')
end

class User < ActiveRecord::Base
  has_one(:company, :foreign_key => 'contact_person_id')
end

这个页面有一个很好的概述:http ://guides.rubyonrails.org/association_basics.html#choosing-between-belongs-to-and-has-one 外键总是在belongs_to关联的表中找到。

您编写它的方式每个用户只能拥有一个他们作为联系人的公司。

要按照您的方式编写 rails 代码,您必须在 users 表中拥有外键。

于 2013-09-03T09:07:00.963 回答