Rails与父母和孩子的自我递归问题

时间:2013-07-18 22:18:29

标签: ruby-on-rails ruby ruby-on-rails-3 rails-models

我正在努力为公司增加一家子公司。所以,我将去公司,并从列表中选择1个或更多的子公司并保存。所以我不是将公司存入子公司(如下图所示),而是在公司增加子公司,

那么下面这个例子对我没有任何意义!我的意思是如何将子公司保存到公司?

class Company < ActiveRecord::Base
    validates   :name, presence: true
    has_many :subsidiaries, :class_name => "Company", :foreign_key => "parent_company_id"
    belongs_to :parent_company, :class_name => "Company",
end 

你能不能告诉我保存在我的控制器中的样子,因为我确定这是我出错的地方。

目前我的问题是我保存的方式我将所谓的子公司保存为parent_id,所以基本上是相反的:

这里我从列表中选择一个子公司:

<%= f.collection_select(:parent_company_id, @companies, :id, :name, :include_blank => true, :multiple => true) %>

要明确目前发生的事情:

  1. 我开了公司A
  2. 我选择公司B作为子公司并保存
  3. 我看公司并看到B有一个子公司A(错!!)并且它有意义,因为它的parent_id被设置为A,但实际上我需要设置它的“subsidiary_id”

1 个答案:

答案 0 :(得分:0)

这种做法的典型方式:

<p>Parent Company</p>
<%= f.collection_select :parent_company_id, ... %>

您可以查看所有子公司记录并设置其母公司。然后,您可以查看@parent.subsidiaries列表。

如果您想从母公司的表单中完成所有操作,您将不得不使用javascript以及fields_foraccepts_nested_attributes_for,或者使用一堆复选框来做一些诡计 - 记录实际更改的是记录,而不是父记录。

观看this railscast可能会有所帮助。