Я реализовал модель с modified_by_id
и modifies_id
самоссылающимися атрибутами, чтобы сохранить «грязное» состояние некоторых моделей.
class CreateModels < ActiveRecord::Migration[5.0]
def change
create_table :models do |t|
t.string :name
t.modified_by_id :integer
t.modifies_id :integer
end
end
end
Эта двойная ассоциация предназначена для ускорения (иупрощение) два запроса
- последняя версия вещей
where(modified_by_id: nil)
- постоянная версия вещей
where(modifies_id: nil)
Все работает хорошо при обработкеидентификаторы вручную, но я не могу смоделировать его должным образом с помощью отношений.
has_one :modifies, class_name: 'Some::Model', foreign_key: 'modifies_id'
belongs_to :modified_by, class_name: 'Some::Model', foreign_key: 'modified_by_id'
При его использовании заполняется только один из идентификаторов при вызове model.modifies = new_model
И это:
has_one :modifies, class_name: 'Some::Model', foreign_key: 'modifies_id'
belongs_to :modified_by, class_name: 'Some::Model', inverse_of: :modifies, foreign_key: 'modified_by_id'
окукливает только одну модель с одинаковым идентификатором дважды (modifes_id == modofies_by_id)
Как это должно быть смоделировано?