alias_method_chain в установщике атрибута HABTM не работает
Так что у меня есть HABTM для постов и тем. A Темы сообщения HABTM и тема Сообщения HABTM. Что мне нужно сделать, это вызвать какой-то метод в сочетании с вызовом post.topics=()
Вот что я пытался сделать в Post.rb:
def topics_with_extra_stuff=(topics)
topics_without_extra_stuff=(topics)
extra_stuff()
end
alias_method_chain :topics=, :extra_stuff
Тем не менее, это сейчас ломается post.topics=()
Я не получу ошибку или что-нибудь, но topics()
останется старым значением после его изменения topics=()
Если я подниму ошибку в topics_with_extra_stuff=
, след скажет, что произошла ошибка в topics=
Так что я знаю, что это там. Я тоже знаю что extra_stuff()
назывался.
Вот пример вывода:
>> p = Post.last
=> #<Post id:1 ....>
>> p.topics
=> [#<Topic id:1 ....>, #<Topic id:2 ....>]
>> p.topics = [ p.topics.first ]
=> [#<Topic id:1 ....>]
>> p.topics
=> [#<Topic id:1 ....>, #<Topic id:2 ....>]
Это не должно все еще иметь 2 Темы, только 1.
Спасибо за понимание.
2 ответа
Я в конечном итоге просто с помощью обратного вызова ассоциации :before_add
вместо.
У меня была такая же проблема (Rails 2.3.11), но при добавлении before_add
Обратный звонок не был вариантом для меня, поэтому я продолжал искать. Наконец мне удалось заставить его работать, используя этот альтернативный способ наложения имен:
old_workflows_setter = self.instance_method(:workflows=)
define_method :workflows= do |value|
# my code
old_workflows_setter.bind(self).call(value)
end