Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在另一个'if'语句中组合'if'_Ruby On Rails_Ruby_Conditional Statements - Fatal编程技术网

Ruby on rails 在另一个'if'语句中组合'if'

Ruby on rails 在另一个'if'语句中组合'if',ruby-on-rails,ruby,conditional-statements,Ruby On Rails,Ruby,Conditional Statements,我有以下if声明: if( @items.name.present? && @items.value.present?) 我想为@items.price.blank添加一张支票?if@items\u表[:check\u price]到此if语句。因此,如果我的模型有[:check_price],那么我的最终if语句将使用&&检查所有三个条件;否则,它将只检查写入的两个条件。您只需要在如何写入条件方面更具创造性: if @items.name.present? &&

我有以下
if
声明:

if( @items.name.present? && @items.value.present?)

我想为
@items.price.blank添加一张支票?if@items\u表[:check\u price]
到此
if
语句。因此,如果我的模型有
[:check_price]
,那么我的最终if语句将使用
&&
检查所有三个条件;否则,它将只检查写入的两个条件。

您只需要在如何写入条件方面更具创造性:

if @items.name.present? && @items.value.present? && 
   (!@items_table[:check_price] || @items.price.blank?)
你明白为什么会这样吗


这样写的话,你基本上是在说“如果名字是存在的,值是存在的,{或者我不应该检查价格,或者价格是空的},那么…”,这与你的要求是一样的。

Ruby使用惰性评估,因此,只要在开始时移动条件,以跳过其他检查,以防出现错误

if @items_table[:check_price] && @items.name.present? && @items.value.present? && @items.price.blank?

我不太确定我是否理解您正在尝试做什么,或者您在做这件事时遇到了什么问题。但我认为这实际上会实现你想要的——在ruby中,&&&'是“短路”,这意味着如果早期的条件评估为falsy,那么以后的条件甚至不会评估

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

我会用英语!,这一直是我比较喜欢的编程语言:-)


你这样做有问题吗?是的,我不知道怎么做。我尝试了(@ iTimes No.Ne.Eng.Value.Stand and & @ ItM.PICIC.BLAST),如果@ iTimsStAd[(Cuff-Quall)],但它似乎不作为一般的实践,你可以考虑使用<代码> @ ItsSyTaby.KEY(?:CuffySalk)< /C> >(或<代码> HasyKEY?<代码> >而不是<代码> @ ItssSt[表:CabySalk ] < /C>因为它与密钥等于
nil
的散列一起工作。你可能会发现它读起来也更好。效果很好,谢谢。我甚至没有想过用这种方式使用or运算符,但这是有道理的。
    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