Rails has_one: проверить, есть ли новая ассоциация - PullRequest
0 голосов
/ 21 января 2019

У меня есть следующая Project модель:

class Project < ApplicationRecord
  belongs_to :manager,
             class_name: 'User'

  has_many :memberships,
           dependent: :destroy

  has_one :technician_membership, -> { technicians }, class_name: 'Membership'
  has_one :technician, through: :technician_membership, class_name: 'User', source: :user

  (...)
end

Я хотел бы создать уведомление, если для проекта назначен новый техник. Я борюсь с тем, чтобы знать, изменился ли техник при сохранении.

Я надеялся этот SO поток решит мою проблему, но, к сожалению, это не так.

project.technician
=> nil
project.technician = User.find 4
=> #<User id: 4, ...>
project.technician.changed?
=> false
project.technician_changed?
=> false

Как лучше всего проверить, была ли создана / обновлена ​​ассоциация?

1 Ответ

0 голосов
/ 21 января 2019

Как насчет поймать это в модели technician_membership и использовать метод before_save?

technician_membership.rb

before_save :check_new_assignation

def check_new_assignation
  if project_id.changed?
    send_notification
  end
end
...