虽然有点标题党了,因为 condition 里其实不是逻辑运算符,而是 symbol。但看上去直觉就会觉得:恩,这应该短路才对。
class Boss < ApplicationRecord
before_save :say_good, if: :case1 && :case2 && :im_fucked_up
def case1
false
end
def case2
false
end
def im_fucked_up
puts "Fucked up"
end
def say_good
puts "Im reallyyyyy fucked up"
end
end
输出结果不会 Really fucked up。 也就是说,整体逻辑返回值依然是 OK 的,但看似像逻辑判断符的 Symbol 不会被短路。
不怕一万就怕万一,万一 condition 里不规范有写入的操作,那就真影响大了。
这个回调的 if 其实不是 if 关键字,它只是 before_save 的一个 key,对应的 value 是它的条件,所以其实用逻辑判断符去连接,是不太规范的。