Rails 3: отношение «многие ко многим» с условием - PullRequest
2 голосов
/ 14 февраля 2011


У меня есть следующие модели

class Project < ActiveRecord::Base
  has_many :project_members
  has_many :members, :through => :project_members, :uniq => true,:class_name => "User",  :source => :user
  has_many :admins, :through => :project_members, :uniq => true, :conditions => ['project_members.admin = ?', true], :class_name => "User", :source => :user

end

class User < ActiveRecord::Base
  # References
  has_many :project_members
  has_many :projects, :through => :project_members

end

и таблица соединений

class ProjectMember < ActiveRecord::Base
    belongs_to :project
    belongs_to :user
end

Кажется, что отношения работают, но когда я хочу добавить администратора в проект через этот код

project.admins.push(u)
project.save

(где u - Пользователь) сохраняет новые отношения, но без установки значения admin в true в таблице объединения.

Даже если я получу это отношение из проекта и вручную установлю для администратора значение true, выполнив

project.project_members.first.admin = true

и сохранение проекта не приводит к обновлению атрибута в таблице.

Что я делаю не так? (Пожалуйста, имейте в виду, что я абсолютный новичок с рубином и рельсами)
Последние часы я гуглил, чтобы найти решение, но ничего не смог найти: /

1 Ответ

2 голосов
/ 14 февраля 2011

Я думаю, вам нужно изменить ассоциацию администраторов на:

has_many :admins, :through => :project_members, :uniq => true, :conditions => {:project_members => {:admin => true}}, :class_name => "User", :source => :user

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...