我是Rails的新手,我想创建一个Person模型,它有一个Address和一个有一个Address和一个Person的公司模型。
这是我到目前为止所做的事情
$ rails generate model Address street:string suburb:string
$ rails g scaffold Person name:string address:references
$ rails g scaffold Company name:string person:references address:references
class Address < ActiveRecord::Base
belongs_to :person
belongs_to :company
end
class Person < ActiveRecord::Base
has_one :address
end
class Company < ActiveRecord::Base
has_one :person
has_one :address
end
显然我错过了一些东西。地址是否需要多态关联?
我很丢失,所以任何指导都会受到赞赏。
干杯
答案 0 :(得分:2)
您错过了外键和/或将它们放在错误的位置。请记住,'子'模型中需要外键。这是拥有的模型。所以是一个Person has_one
地址,该地址是拥有的,并且应该包含一个引用Person的外键。
外键是数据库中的列,或模型中的属性,用于保存关联的拥有者模型的id。例如,belongs_to
一个Person在数据库中看起来像这样的地址模型:
Address --> | address_id | person_id | street | suburb |
如果它属于个人和公司,它应该是这样的。
Address --> | address_id | person_id | company_id | street | suburb |
除了上述内容,您应该像这样生成脚手架代码:
$ rails generate model Address street:string suburb:string person_id:integer company_id:integer
$ rails g scaffold Person name:string
$ rails g scaffold Company name:string
您的型号代码看起来不错。请注意,Rails更喜欢“配置约定”,因此地址模型中的belongs_to :person
将通过'约定'告诉rails在Address表中查找person_id
形式的外键。