我有以下if
声明:
if( @items.name.present? && @items.value.present?)
我想在此@items.price.blank? if @items_table[:check_price]
语句中添加if
的检查。因此,如果我的模型有&&
,我的最终if语句将使用[:check_price]
检查所有三个条件;否则它只会检查所写的两个条件。
答案 0 :(得分:1)
你只需要更有创意地写下你的病情:
if @items.name.present? && @items.value.present? &&
(!@items_table[:check_price] || @items.price.blank?)
你知道为什么会这样吗?
通过这种方式写作,您基本上会说"如果名称存在且价值存在且{我不应该检查价格,或者价格是空白的然后......"这相当于你提出的问题。
答案 1 :(得分:0)
Ruby使用延迟评估,因此只需在开始时移动条件,以便在出现错误时跳过其他检查。
if @items_table[:check_price] && @items.name.present? && @items.value.present? && @items.price.blank?
答案 2 :(得分:0)
我不太确定我明白你要做什么或者你做了什么问题。但我认为,这实际上只会做你想要的 - 在红宝石&&&'是"短路",意味着后来的条件甚至不会评估早期的评估是否为假。
if( @items.name.present? && @items.value.present? && @items_table[:check_price])
如果你真的想要两个嵌套的if,那就是这样的:
if( @items.name.present? && @items.value.present?)
if @items_table[:check_price]
# stuff
end
end
答案 3 :(得分:0)
我会使用英语!,这总是我最喜欢的编程语言: - )
name_and_value_valid?(@items) && price_valid?(@items, @items_table)
def name_and_value_valid?(items)
items.name.present? && items.value.present?
end
def price_valid?(items, items_table)
items.price.blank? if items_table[:check_price]
end