簡體   English   中英

HABTM屬性的setter上的alias_method_chain不起作用

[英]alias_method_chain on an HABTM attribute's setter isn't working

所以我有一個用於帖子和主題的HABTM。 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個。

感謝您的任何見解。

我也遇到了同樣的問題(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

我最終僅使用關聯回調:before_add

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM