Пользовательский установщик атрибута внешнего ключа для Mongoid с использованием Rails

#ruby-on-rails #ruby-on-rails-3 #mongodb #mongoid

#ruby-on-rails #ruby-on-rails-3 #mongodb #mongoid

Вопрос:

В моем приложении rails есть древовидная модель, подобная этой:

 class File
  belongs_to :parent, :foreign_key => "parent_id", :class_name => "File"
end
  

Я хочу добавить функциональность к поведению родительского установщика. Итак, что-то вроде этого (за исключением того, что это не работает)?

 def parent=(new_parent)
  super(new_parent)
  # Additional stuff I want to do here
end
  

Мне нужно, чтобы поведение по умолчанию все еще существовало, поскольку я думаю, что оно управляет отношениями, но мне нужно знать, когда родительский элемент изменен, чтобы я мог выполнить некоторые дополнительные задачи.

Ответ №1:

В настоящее время у меня есть обходной путь:

 class File   
  belongs_to :parent, :foreign_key => "parent_id", :class_name => "File"   
  before_save :check_parent

  def check_parent
    if self.parent_id_changed?
      # Additional stuff I want to do here
    end   end end
  

Единственным недостатком является то, что вам нужно сохранить, чтобы это сработало. В идеале я бы хотел, чтобы он включился, как только будет изменен parent_id. В противном случае это работает просто отлично, хотя я был бы открыт для лучшего решения.