Bac*_*cko 6 ruby ruby-on-rails touch ruby-on-rails-3 ruby-on-rails-3.1
我正在使用Rails 3.1.0,我想belongs_to
只在满足某些条件时"触摸" 关联的父模型.
例如,此时我有:
belongs_to :article,
:touch => true
Run Code Online (Sandbox Code Playgroud)
只有当它是"公共"时,我才会"触摸"父模型.也就是说,Article
该类有一个名为access
(@article.access
=> public
或private
)的属性,我想在"触摸"之前检查这个值:如果这个值不是 public
,那么"触摸"它!
是否可以在belongs_to
关联声明中"直接"进行?如果是这样,怎么样?
你可以像你说的那样尝试 lambda,但我不确定它是否会起作用。像这样的东西:
belongs_to :article, :touch => Proc.new{|o| o.article && o.article.public }
Run Code Online (Sandbox Code Playgroud)
根据实现,当它不可用时,您可以尝试返回nil
而不是false
在 proc 中
belongs_to :article, :touch => Proc.new{|o| o.article && o.article.public ? true : nil }
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请使用像这样的保存前回调:
class Model < ActiveRecord::Base
belongs_to :article
before_save :touch_public_parent
def touch_public_parent
article.touch if article && article.public?
end
end
Run Code Online (Sandbox Code Playgroud)
如果您有任何问题,请告诉我。
更新 #1
相关部分来自add_touch_callbacks
:
if touch_attribute == true
association.touch unless association.nil?
else
association.touch(touch_attribute) unless association.nil?
end
Run Code Online (Sandbox Code Playgroud)
因此,如果您传递 true,则对updated_at
属性进行简单的触摸。如果您传递字段名称,则除非您通过nil
. 如果您通过 nil 不会更新任何内容。这就是为什么我说也许你可以尝试第二个版本的belongs_to
关联。
归档时间: |
|
查看次数: |
9482 次 |
最近记录: |