Связь has_one через has_many с динамическими условиями - Rails - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть три таблицы:

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, учитывая, что все связанные назначения будут иметь одного и того же хранителя?

1 Ответ

0 голосов
/ 16 ноября 2018

Извините, если я неправильно понял вашу проблему, так как неясно, какой должна быть связь между AssignmentGroup и Assignment, но попробуйте это:

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

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