Rails двусторонняя ассоциация - PullRequest
0 голосов
/ 25 октября 2019

Я реализовал модель с 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)

Как это должно быть смоделировано?

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