我有回调的条件
before_save :method, :if => :email_changed? && :is_admin?
即使只有第二个条件为真,该方法也会执行,即is_admin?
为真。
虽然它适用于lambda
before_save :method, :if => lambda { |u| u.email_changed? && u.is_admin? }
任何人都可以解释一下吗?
答案 0 :(得分:1)
您无法在裸&&
定义中使用||
s,:if
或其他类似运算符,因为在加载类本身时,此类代码静态执行。
特定语句:if => :email_changed? && :is_admin?
被解释为{ :if => :email_changed? && :is_admin? }
(它是before_save
方法的最后一个参数,可以写成没有花括号的哈希)。这最终变为{ :if => :is_admin? }
,在控制台中自己看一下:
{ :if => :email_changed? && :is_admin? }
# => { :if => :is_admin? }
定义它的正确方法确实是使用lambda,以便每次运行回调时动态评估它。