2011-11-11 41 views
0

我有三個模型,一個用於項目,其他用戶,另一個用於has_many:通過調用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) 

通過設置管理= true時,我說,用戶的的管理員聯繫項目。

如何知道用戶是管理員?也許是這樣的

project.is_admin_user?(@current_user) 

回答

1

has_many :through是這裏的M:N關係projectsusers之間。因此,問題必須始終如一:「用戶是一個項目的管理員用戶嗎?」

所以你的電話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 

,以便它可以在兩個方向上問。

在我看來,有三種情況:

  1. 用戶必須在項目沒有任何關係。
  2. 用戶與項目有關係,但不是它的管理員。
  3. 用戶與項目有關係,他是管理員。