我有三个模型,一个用于项目,另一个用于用户,另一个用于has_many:通过称为Projectzation。
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)
通过设置admin = true,我说用户是项目的管理员。
如何知道用户是否是管理员?也许是这样的
project.is_admin_user?(@current_user)
答案 0 :(得分:1)
has_many :through
此处是projects
和users
之间的m:n关系。所以问题必须始终是:&#34;用户是项目的管理员用户吗?&#34;
因此,您的电话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
因此可以向两个方向询问。
在我看来,有三种情况: