就像你说的你可以试试拉姆达但我不确定它是否会工作。事情是这样的:
belongs_to :article, :touch => Proc.new{|o| o.article && o.article.public }
按照implementation也许你可以尝试在proc返回nil
,而不是false
,
belongs_to :article, :touch => Proc.new{|o| o.article && o.article.public ? true : nil }
如果这不工作使用之前保存时,它的不可用回调如下:
class Model < ActiveRecord::Base
belongs_to :article
before_save :touch_public_parent
def touch_public_parent
article.touch if article && article.public?
end
end
让我知道如果您有任何问题。
更新#1
相关部分从add_touch_callbacks
:
if touch_attribute == true
association.touch unless association.nil?
else
association.touch(touch_attribute) unless association.nil?
end
所以,如果你通过真实的,那么确实就updated_at
属性简单的触摸。如果您传递字段名称,则会更新该字段,除非您通过nil
。如果你通过零不会更新什么。这就是为什么我说,也许你可以尝试第二版belongs_to
关联。
没有与你在答案中链接的add_touch_callbacks方法相关的文档...你能说一些关于它的更多信息吗(例如:它是如何工作的)? – Backo 2012-01-16 04:48:14
@Backo当然,请看我最新的答案。 – dombesz 2012-01-16 09:32:05
非常感谢。见下一个问题/答案! – Backo 2012-01-16 11:18:23