我想创建一个只观察一种自定义方法的观察者。
我得到了巴纳模特。对于image
方法的每次调用,我想增加pageview
字段。
class Baner < ActiveRecord::Base
has_attached_file :image
def pageview_inc
pageview += 1
save
end
alias old_image image
def image
old_image
end
end
是否可能只为一个自定义方法设置观察者?
在执行image
方法调用pageview_inc
方法之后。
修改
如果我改变
的方法 def image
old_image
self.pageview += 1
self.save!
end
我得到stack level too deep.
的效果相同
def image
self.pageview += 1
self.save!
old_image
end
答案 0 :(得分:1)
class Baner < ActiveRecord::Base
has_attached_file :image
alias_method :old_image, :image
def image
increment!(:pageview)
old_image
end
end
这里有两件事:
1)看到这个问题:Should I use alias or alias_method?
2)increment!
将更新计数器而不保存整个模型,避免在保存过程中可能调用image
(从而导致递归循环)。
答案 1 :(得分:0)
这应该可以实现你的目标:
def image
old_image
write_attribute("pageview", pageview + 1)
end