我有以下表格
用户。
名称 电子邮件 .. 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
答案 0 :(得分: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外键ALWAYS位于包含belongs_to
关联的表格中。
您编写它的方式每个用户只能有一个公司,他们是联系人。
要按照您的方式编写rails代码,您必须在users表中使用外键。