Хотя я не отвечаю на ваш вопрос напрямую, реализация мне кажется немного неуклюжей.
Если бы у вас были пользователи и проекты, ответ был бы прост - вы могли бы просто создать has_and_belongs_to_many
взаимосвязь между двумя моделями и создать таблицу соединений. Флаг администратора делает ситуацию немного сложнее, но я не уверен, что объединение модель было бы необходимо.
Лично я бы просто установил две связи между моделями, например:
class Project < ActiveRecord::Base
has_and_belongs_to_many :users
has_and_belongs_to_many :administrators, :class_name => 'User', :join_table => 'administrators_projects' # potentially some foreign_key directives here as well
end
class User < ActiveRecord::Base
has_and_belongs_to_many :projects
has_and_belongs_to_many :administered_projects, :class_name => 'Project', :join_table => 'administrators_projects' # potentially some foreign_key directives here as well
end
Таким образом, у вас останутся только две модели, но со всеми необходимыми вам функциями (и ваши структуры "INTENDED USAGE" будут работать). Если вы хотите, вы также можете добавить администраторов в отношение projects_users (так, чтобы администраторы были администраторами и пользователи), но это полностью зависело от того, как вы хотите структурировать остальную часть таблицы .