2011-01-31 13 views
0

私は、従業員、管理者、および企業のクラスを持っていると言います。これらはActiveRecordから継承されており、期待どおりに関連付けられています。チェーン内の以前のメソッドにアクセスする(Ruby on Rails)

Employeeクラスのインスタンスが2つあります(bobjane)。両方とも同じ会社で働いていますが、異なるマネージャーを抱えています。

bob.company.xまたはjane.company.xに電話をかけて、同じ会社で働いていてもマネージャーが異なるため異なる結果を得たいと考えています。私が従業員のための方法としてxを定義し、bob.company_xと呼ぶのを妨げる他の制限があります。この例ではもっと簡単になると思います。

私のメソッド定義の中で、どの従業員がこのメソッドチェーンを開始したのかわかる方法はありますか?

答えて

2

あなたが提案するものは、きれいで簡単な方法で行うことはできません。それとは反対に、直感的ではありません。

class Employee 
    belongs_to :company 
    belongs_to :manager 
end 

が唯一の解決策です。これは明確に定義された関係を持っています。これらの関係は、とにかく利用可能である必要があります。bobのマネージャーはどのように分かりますか? bob.companyは彼の会社であり、そのレベルで(Companyが)bobのないより多くの知識がないので、あなたが、bob.company.my_managerは意味がありません書くことができます

ソリューション、あなたが提案として、。完全性期すため

:実際には管理者が従業員自身であるので、我々は少し違っその関係を記述します。

class Employee 
    belongs_to :manager, :class => Employee 
end 

(とあなたのemployees表には、フィールドmanager_idを追加する必要がありますが)。

これが役に立ちます。

+0

私の質問は、関連付けを設定する方法ではありません。状況は、メソッドが呼び出されたスコープを認識しているかどうかを調べるために、bob.company.xを呼び出すときにxがbobを介して呼び出され、janeは呼び出されなかったことを知るように工夫されています。 – muirbot

+0

私は「会社」の方法である「x」が企業[11] .x、Company.new.x、「bob.company」などと呼ばれているかどうかを知る方法がないということは明らかである。 x 'である。 「会社」に「従業員」が1つしかない場合は、可能です。しかしそれは目的を破るものです。だから質問をしてから、私はあなたの団体が間違っていると思う。したがって提案。従業員のマネージャーは、会社には(単体ではなく)従業員にリンクされています。 OOのあなたの経験が何であるか分かりません。 – nathanvda

+0

ありがとうございます。私はそれが可能かどうかを知りたがっていました。 – muirbot

関連する問題