目前我有以下两行代码
errors.add_to_base I18n.t :error_message if value != 1
return false if !errors.blank?
是否可以将其浓缩为一行代码?我需要在具有不同错误消息和条件的多个地方执行此操作。此外,“return false”是停止ActiveRecord生命周期的流程。
答案 0 :(得分:1)
嗯。如果您知道errors.blank?
将为真,除非第一个条件触发:
(errors.add_to_base I18n.t :error_message; return) if value != 1
更新: 啊哈,您愿意定义一种方法。 Proc
对象怎么样?它比这里的方法更好,如果Proc
块返回,那么调用将从周围的方法返回。
test = Proc.new do |cond, msg|
errors.add_to_base I18n.t msg if cond
return unless errors.blank?
end
# ...
test.call value != 1, :error_message
请注意,您不需要return false
,因为普通return
将返回nil
,这将足够好,除非一些虐待狂正在做{{1}之类的事情}}。 :-)
答案 1 :(得分:1)
您可以利用布尔逻辑运算符的工作方式并执行以下操作:
value != 1 && errors.add_to_base I18n.t :error_message && return false
不太清楚,我不建议使用它。此外,如果errors.add_to_base
返回的内容为“falseish”,则返回false将不会发生。
请记住:“总是编码,好像维护你的代码的人是一个知道你住在哪里的暴力精神病患者”