0

私は今日レールを学び始めましたが、これがどのように機能するかはよくわかりません:

私が会社を持っているとしましょう。その会社には多くの子会社があるかもしれません。

子会社は会社です。明らかな理由から、会社は独自の子会社になることはできません。

子会社は、会社の子会社でもある子会社を持つことはできません

したがって、子会社も子会社を持つことができるため、無制限にネストされます

以下についてもよくわからないのは、子会社が会社であるということです

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

私のテンプレートの1つで:

<% @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 %>

これは間違った表示です。子会社を持つものは子会社がないことを示し、子会社であるものは子会社があることを示します。つまり、基本的には親の現在、その「子」を示しています。

なぜこれが起こるのですか?

4

2 に答える 2

1

必要なのは、再帰的な自己関係です。

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

したがって、本質的に、会社は会社に属し、多くの会社を持っています。ただし、会社(子会社)には特別な名前が付けられているため、関係を手動で設定してこの「エイリアス」を付けています。「親」会社についても同じことをしたいかもしれません。

次に、検証を使用して、これらすべての条件を確認します。

于 2013-07-18T14:59:52.633 に答える
1

私は使うだろう

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
于 2013-07-18T15:00:03.433 に答える