2011-11-11 12 views
0

私は3つのモデルを持っています.1つはプロジェクト用、もう1つはユーザー用、もう1つはhas_many:throughというProjectzationです。has_many:through - 中間モデルのデータへのアクセス

Projectzationの移行は、次に、この

class CreateProjectzations < ActiveRecord::Migration 
    def change 
    create_table :projectzations do |t| 
     t.references :user, :project 
     t.boolean :admin 
     t.timestamps 
    end 
    end 
end 

のように見える、真の管理者=を設定することによって、この

user.projectzation.create(:project => project, :admin => true) 

のように私は関連付けを作成するために、私は、ユーザーがのadminstratorであると言いますプロジェクト。

ユーザーが管理者であるかどうかを確認するにはどうすればよいですか?多分これ

project.is_admin_user?(@current_user) 

答えて

1

has_many :throughのようなものがここメートルです:projectsusers間のnの関係。だから問題は常にあるべきです:「ユーザーはプロジェクトの管理者ですか?」

project.is_admin_user?(@current_user)UsersControllerの文脈で)あなたのコールは意味があります。

可能な実装は次のようになります。

class Project ... 
    def is_admin_user?(user) 
    user.projectzations.detect{|p| p.project == self && p.admin?} != nil 
    end 
end 

それは両方向に求められることができたので、あなたは

class User ... 
    def is_admin_user_for?(project) 
    project.is_admin_user?(self) 
    end 
end 

を追加することができます。私の意見で

は、3つのケースがあります。

  1. ユーザーはプロジェクトとは関係ありません。
  2. ユーザーはプロジェクトとの関係は持っていますが、その管理者はいません。
  3. ユーザーはプロジェクトと関係があり、彼は管理者です。
関連する問題