正常に機能していても、これがどのように機能するかについて少し混乱しました。同じ他のモデルに 2 つの関連付けを持つモデルがあります。
会社には所有者がいて、会社にはクラス ユーザーの多くの従業員がいます。
ここに私の会社のモデルがあります:
class Company < ActiveRecord::Base
validates_presence_of :name
has_many :employee, :class_name => 'User'
has_one :owner, :class_name => 'User'
accepts_nested_attributes_for :owner, :allow_destroy => true
end
ここに私のユーザーモデルがあります:
class User < ActiveRecord::Base
include Clearance::User
attr_accessible :lastname, :firstname #other attr are whitelisted in clearance gem
validates_presence_of :lastname, :firstname
belongs_to :company
end
今、私はこの会社の所有者を含む3人の従業員を持っていると仮定します. 最初に会社を作成するとき、所有者を ID 1 の従業員に設定し、他の 2 人 (2,3) は company_id (user.company=company) を設定することによって従業員リストに追加されます。3 つすべての company_id は、1 であると想定できる会社 ID に設定されています。
company.owner を要求すると適切なユーザーが取得され、company.employee を実行すると 3 つすべてが取得されます。
所有者をユーザー 2 に変更すると、company_id を nil に設定して、ユーザー 1 を従業員から自動的に削除します。これは問題ありません。単純な従業員として彼を追加しても、すべて問題ありません。
レールはどれがどれであるかをどうやって知っているのですか? つまり、従業員が単なる従業員ではなく所有者であることをどのように知るのでしょうか? これを定義するスキーマはありません。
所有者の関連付けを逆にして、会社をユーザーに属するようにする必要があると感じています。