Пользовательский установщик для атрибута внешнего ключа для Mongoid, использующего Rails - PullRequest
1 голос
/ 14 октября 2011

В моем приложении 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 Ответ

0 голосов
/ 16 октября 2011

Обходной путь, который я в настоящее время имею, является следующим:

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 изменился. В противном случае это работает очень хорошо, хотя я был бы открыт для лучшего решения.

...