有没有办法动态地与&&
运算符连接条件?
我有这个:
def condition(name)
if Profile.reflect_on_association(name)
send(name).present? && send(name).persisted?
else
send(name).present?
end
end
我尝试在数组中构建条件,然后将它们与&&
连接起来,但当然不起作用。
感谢您的任何指示。
答案 0 :(得分:2)
好吧,如果你称之为"条件"是一个值或函数的数组,导致truthy / fasly值,你可以直接用所有值来评估它们:?
conditions_1 = [1, 2, nil]
conditions_1.all? # => false
conditions_2 = [1, true, "lala"]
conditions_2.all? # => true
'所有'评估数组中的所有项是否都符合条件 - 如果没有参数,它将只评估它们是否都是真的。虽然不完全是你要求的,但它应该导致相同的结果。
答案 1 :(得分:2)
我对原始问题的措辞有点不清楚 - 您是否正在寻找一种方法来合并send(name).present? && send(name).persisted?
?
一个选项是:%i[present? persisted?].all? { |condition| send(name).send(condition) }
虽然如果你只有一些枚举条件,我认为元编程对于可读性来说更糟糕,你在原始问题中编写的代码可能更好。