Rails有一个联想混乱

时间:2014-03-11 07:09:25

标签: ruby-on-rails-4 associations polymorphic-associations

我是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

显然我错过了一些东西。地址是否需要多态关联?

我很丢失,所以任何指导都会受到赞赏。

干杯

1 个答案:

答案 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形式的外键。