簡體   English   中英

Rails模型has_many

[英]Rails models has_many

我今天開始學習rails並不太確定它是如何工作的:

可以說我有一家公司,該公司可能有很多子公司。

子公司是公司。 由於顯而易見的原因,公司不能成為自己的子公司。

子公司不能擁有同時也是公司子公司的子公司

所以子公司也可以擁有子公司,所以它無限制地嵌套

我不確定的是,子公司是一家公司

class Company < ActiveRecord::Base
    has_many :subsidiaries
end
class Subsidiary < ActiveRecord::Base
    belongs_to :companies
end

我確定這是錯的,只是把東西放在這里

更新:

好的,所以我按照下面的說明操作:

class Company < ActiveRecord::Base
    validates   :name, presence: true
    belongs_to :company
    has_many :subsidiaries, foreign_key: 'company_id', class_name: 'Company'
end

在我的一個模板中:

<% @companies.each do |company| %>
    <li><%= link_to  "#{company.name} #{company.subsidiaries.length > 0 ? "(#{company.subsidiaries.length} subsidiaries)" :"" }", company_path(@company, :id => company.id) %></td>
<% end %>

現在這是錯誤的,所發生的事情是,有子公司的Ones顯示他們沒有子公司,而子公司顯示他們有子公司,所以基本上它現在顯示它的父母,它的“孩子”

不知道為什么會這樣?

你想要的是一個遞歸的自我關系:

class Company < ActiveRecord::Base
    belongs_to :company
    has_many :subsidiaries, foreign_key: 'company_id', class_name: 'Company'
end

因此,基本上,一家公司屬於一家公司,並且擁有許多公司。 但是,我們為其公司(子公司)設置了一個特殊名稱,因此我們通過手動設置關系為其提供“別名”。 您可能希望為“父母”公司做同樣的事情。

然后,您將使用驗證來檢查所有這些條件。

我會用

class Company < ActiveRecord::Base
  has_many   :subsidiaries, class_name: 'Company', foreign_key: :parent_id
  belongs_to :parent, class_name: 'Company'
end

要使用這些關系,您需要在表中使用parent_id列:

rails g migration add_parent_id_to_companies parent_id:ineteger
rake db:migrate

你會這樣使用:

          A
        /   \
       /     \
      B       C
     / \
    /   \
   D     E


A.subsidiaries => [B,C]
B.subsidiaries => [D,E]
C.subsidiaries => [] # actually a relation without results
B.parent => A
C.parent => A
A.parent => nil
D.parent => B

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM