Я не уверен, какие отношения вы хотите. Этот пример аналогичен приведенному в Rails Guide
class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, :through => :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :physician
belongs_to :patient
end
class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, :through => :appointments
end
- A
Physician
имеет много Appointments
и имеет много Patients
-
Appoinment
принадлежит (имеет один) Physician
и один Patient
- a
Patient
имеет много Appointments
и много Physicians
.
Относительно параметра: counter_cache, в соответствии с own_to doc :
Если вы хотите, чтобы номер Patients
принадлежал Physician
, вам потребуется:
class Appointment < ActiveRecord::Base
belongs_to :physician, :counter_cache => :patient_count
belongs_to :patient
end
И вам нужно написать миграцию, чтобы добавить столбец Patient_Count в таблицу Phyisicans
.
Однако для has_many через отношения Rails 3.1, похоже, автоматически обнаруживает столбец counter_cache , поэтому вам не нужно его указывать (удалить :counter_cache => :patient_count
). Если вы укажете его, ваш счетчик увеличится на два (это очень странно).
Кстати, кажется, есть некоторые проблемы с опцией: counter_cache в Rails 3.1 , как сообщается здесь:
Учитывая все вышесказанное, возможно, вам лучше всего написать собственный механизм подсчета с помощью обратных вызовов.
Надеюсь, это поможет:)