rails after_save回调条件

时间:2016-04-22 17:44:52

标签: ruby-on-rails

我有回调的条件

before_save :method, :if => :email_changed? && :is_admin?

即使只有第二个条件为真,该方法也会执行,即is_admin?为真。 虽然它适用于lambda

before_save :method, :if => lambda { |u| u.email_changed? && u.is_admin? }

任何人都可以解释一下吗?

1 个答案:

答案 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,以便每次运行回调时动态评估它。