has_one 通过 has_many 与动态条件的关联 - Rails

has_one association through has_many with dynamic conditions - Rails

我有三个表:

class Keeper
  has_many :assignments
end

class Assignment
  belongs_to :keeper
  belongs_to :assignment_group
end

class AssignmentsGroup
  has_many :assignments
  validate :uniqueness_of_keeper
end

与单个 assignment_group 关联的作业必须有一个管理员。我的问题是:如果所有关联的分配都具有相同的管理员,我如何将 has_one: keeper 关联添加到 AssignmentsGroup

抱歉,如果我误解了你的问题,因为我不清楚 AssignmentGroupAssignment 之间的关联应该是什么,但是试试这个:

class Keeper
  has_many :assignments
end

class Assignment
  belongs_to :keeper
  belongs_to :assignment_group # will need to add a reference to the assignments table
end

class AssignmentsGroup
  has_many :assignments
  has_many :keepers, through: assignments
  validate :single_keeper

  private     

  def single_keeper
    errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
  end
end

https://guides.rubyonrails.org/active_record_validations.html#custom-methods