![](/img/trans.png)
[英]Rails - alias_method_chain with a 'attribute=' method
[英]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.