Отзыв ActiveRecord на изменении колонки

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

class Doctor
  has_many :appointmets
  # has attribute 'average_rating' (float)
end

class Appointment
  belongs_to :doctor
  # has_attribute 'rating' integer
end

Я хочу установить отзыв устанавливать доктора average_rating каждый раз, когда назначение оценивается, т.е. каждый раз рейтинг , колонка на столе Назначений затронута.

Я попробовал этим:

class Appointment
  after_update :update_dentist_average_rating, if: :rating_changed?
  # also tried with after_save 
private

  def update_dentist_average_rating
    ratings = Appointment.where(dentist_id: dentist.id).map(&:rating)
    doctor.average_rating = ratings.reduce(:+)/ratings.size if ratings.any?
    doctor.save
  end
end

But doesn't work, appointment.dentist.average_rating returns nil always. I can't seem to test whether the callback is running on appointment.save. What I'm missing?

Edit: this is the app flow

  1. пользователь (класса Пациент) экономит встречу с рейтингом: ноль и некоторый doctor_id.
  2. , Если appointment.date проходит, appointment.rating, может быть отредактирован или установлен на форме через''
  3. Тогда я должен обновить назначение doctor.average_rating
2
nl ja de
вы экономите изменения на случае доктора?
добавлено автор kr1, источник

1 ответы

Достигнутый это с этим отзывом, хотя я не знаю, является ли это лучший способ:

after_save if: :rating_changed? do |apt|
  ratings = Appointment.where(doctor_id: 10).map(&:rating)
  doctor.average_rating = ratings.reduce(:+)/ratings.size if ratings.any?
  doctor.save!
end
3
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff