has_many: through - доступ к данным в средней модели - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть три модели, одна для проектов, другая для пользователей и другая для has_many: через Projectized.

Проектная миграция выглядит следующим образом

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 Ответ

1 голос
/ 11 ноября 2011

has_many :through - это отношение m: n между projects и users. Поэтому вопрос должен быть постоянным: «Является ли пользователь администратором проекта?»

Итак, ваш звонок 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. Пользователь имеет отношение к проекту, и он является администратором.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...