[英]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.