has_many:through - 访问中间模型中的数据

时间:2011-11-11 03:55:51

标签: ruby-on-rails activerecord

我有三个模型,一个用于项目,另一个用于用户,另一个用于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)

1 个答案:

答案 0 :(得分:1)

has_many :through此处是projectsusers之间的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

因此可以向两个方向询问。

在我看来,有三种情况:

  1. 用户与项目无关。
  2. 用户与项目有关系,但不是管理员。
  3. 用户与项目有关系,他是管理员。