У меня есть ассоциация has_one, которая отражает объекты другой ассоциации.У меня есть Project, который имеет много ProjectUsers, которые связывают Projects и Users.Один из тех ProjectUsers является авторитетным.Проблема в том, что has_one и has_many используют один и тот же внешний ключ для project_users.Вот основная идея моделей.
class Project < ActiveRecord::Base
has_many :project_users, :class_name => 'ProjectUser', :foreign_key => 'project_id'
has_one :authoritative_user, :class_name => 'ProjectUser', :foreign_key => 'project_id', :conditions => {:authoritative => true}
end
class ProjectUser < ActiveRecord::Base
belongs_to :project
belongs_to :user
# has a boolean column 'authoritative'
end
Что я хотел бы сделать, это вызвать что-то вроде.
project = Project.new
project_user = ProjectUser.new
project.project_users << project_user
project.authoritative_user = project_user
other_project_user = ProjectUser.new
project.project_users << other_project_user
project.authoriative_user = other_project_user
Где authoritative_user = будет обновлять пользователя проекта, чтобы иметьДля авторитетного установите значение «истина», а для предыдущего доверенного пользователя - «Полномочия».Другая проблема, с которой я столкнулся, это то, что во второй раз я устанавливаю authoritative_user для проекта, для project_id предыдущего ProjectUser устанавливается значение nil, и поэтому он больше не ассоциируется, хотя Project_users проекта.
Я не уверен, что еслиЯ просто делаю это совершенно неправильно, или если я что-то упускаю.