0

私は苦労している協会を持っています。私はDepartmentモデルを持っており、その中にはマネージャーを含む多くのスタッフがいる可能性があります。

電話できるようにする必要があります。

Department.staff-そしてマネージャーを含むすべてのスタッフのコレクションを取得します。Department.manager-そしてマネージャーを取得します。

User.department-そして、ユーザーがスタッフであるかマネージャーであるかにかかわらず、ユーザー部門を取得します。User.is_manager-そして、彼らが部門を管理しているかどうかについてブール値を取得します。User.manages-管理する部門を取得します。

この関連付けを設定するのに最適なものは何ですか?私は現在、次のようなものから始めました。

class User < ActiveRecord::Base
      belongs_to :department
      has_one :manages, :class_name => 'Department', :foreign_key => :manager_id
end

class Department < ActiveRecord::Base
      belongs_to :manager, :class_name => "User"
      has_many :staff, :class_name 'Users'
end

私がこれに関して抱えている問題は、マネージャーをマネージャーとしてもスタッフのメンバーとしても追加しなければならないということです。これは少し不器用に感じますが、おそらく私はうるさいですか?

誰かがいくつかのより良いオプションを提案できますか?

4

1 に答える 1

1

この関連付けを試してください:

class Department < ActiveRecord::Base
  has_many :staffs, class_name: "User"
  has_one :manager, class_name: "User", foreign_key: "manager_id"
end

class User < ActiveRecord::Base
  belongs_to :department
end

Userテーブルに、manager_idという列と。という列があることを確認してくださいdepartment_id。テーブルにブール列が呼び出さmanagerれている場合は、ユーザーがマネージャーであるかどうかを確認するメソッドがあります。Usermanager?

あなたがやりたいことをするために:

@department = Department.find(1) # Find department with id = 1
@department.staffs # Get all staffs of department

@department.manager.name # Get name of manager of department

@user = User.find(1) # Find user with id = 1
@user.department.name # Get name of department which user belongs to
@user.manager? # Return value of manager column
于 2012-12-03T21:03:22.450 に答える